首页 > 编程语言 >Javaweb之SpringBootWeb案例本地存储的详细解析

Javaweb之SpringBootWeb案例本地存储的详细解析

时间:2024-09-13 22:23:44浏览次数:18  
标签:文件 存储 Javaweb image SpringBootWeb 磁盘 解析 上传 String


 2.2 本地存储

前面我们已分析了文件上传功能前端和后端的基础代码实现,文件上传时在服务端会产生一个临时文件,请求响应完成之后,这个临时文件被自动删除,并没有进行保存。下面呢,我们就需要完成将上传的文件保存在服务器的本地磁盘上。

代码实现:

  1. 在服务器本地磁盘上创建images目录,用来存储上传的文件(例:E盘创建images目录)
  2. 使用MultipartFile类提供的API方法,把临时文件转存到本地磁盘目录下

MultipartFile 常见方法:

  • String getOriginalFilename(); //获取原始文件名
  • void transferTo(File dest); //将接收的文件转存到磁盘文件中
  • long getSize(); //获取文件的大小,单位:字节
  • byte[] getBytes(); //获取文件内容的字节数组
  • InputStream getInputStream(); //获取接收到的文件内容的输入流
@Slf4j
@RestController
public class UploadController {

    @PostMapping("/upload")
    public Result upload(String username, Integer age, MultipartFile image) throws IOException {
        log.info("文件上传:{},{},{}",username,age,image);

        //获取原始文件名
        String originalFilename = image.getOriginalFilename();

        //将文件存储在服务器的磁盘目录
        image.transferTo(new File("E:/images/"+originalFilename));

        return Result.success();
    }

}

利用postman测试:

注意:请求参数名和controller方法形参名保持一致

Javaweb之SpringBootWeb案例本地存储的详细解析_上传

编辑

通过postman测试,我们发现文件上传是没有问题的。但是由于我们是使用原始文件名作为所上传文件的存储名字,当我们再次上传一个名为1.jpg文件时,发现会把之前已经上传成功的文件覆盖掉。

解决方案:保证每次上传文件时文件名都唯一的(使用UUID获取随机文件名)

@Slf4j
@RestController
public class UploadController {

    @PostMapping("/upload")
    public Result upload(String username, Integer age, MultipartFile image) throws IOException {
        log.info("文件上传:{},{},{}",username,age,image);

        //获取原始文件名
        String originalFilename = image.getOriginalFilename();

        //构建新的文件名
        String extname = originalFilename.substring(originalFilename.lastIndexOf("."));//文件扩展名
        String newFileName = UUID.randomUUID().toString()+extname;//随机名+文件扩展名

        //将文件存储在服务器的磁盘目录
        image.transferTo(new File("E:/images/"+newFileName));

        return Result.success();
    }

}

在解决了文件名唯一性的问题后,我们再次上传一个较大的文件(超出1M)时发现,后端程序报错:

Javaweb之SpringBootWeb案例本地存储的详细解析_上传_02

编辑

报错原因呢是因为:在SpringBoot中,文件上传时默认单个文件最大大小为1M

那么如果需要上传大文件,可以在application.properties进行如下配置:

#配置单个文件最大上传大小
spring.servlet.multipart.max-file-size=10MB

#配置单个请求最大上传大小(一次请求可以上传多个文件)
spring.servlet.multipart.max-request-size=100MB

到时此,我们文件上传的本地存储方式已完成了。但是这种本地存储方式还存在一问题:

Javaweb之SpringBootWeb案例本地存储的详细解析_文件上传_03

编辑

如果直接存储在服务器的磁盘目录中,存在以下缺点:

  • 不安全:磁盘如果损坏,所有的文件就会丢失
  • 容量有限:如果存储大量的图片,磁盘空间有限(磁盘不可能无限制扩容)
  • 无法直接访问

为了解决上述问题呢,通常有两种解决方案:

  • 自己搭建存储服务器,如:fastDFS 、MinIO
  • 使用现成的云服务,如:阿里云,腾讯云,华为云


标签:文件,存储,Javaweb,image,SpringBootWeb,磁盘,解析,上传,String
From: https://blog.51cto.com/u_16265376/12009040

相关文章

  • Python XML 解析
    什么是XML?Python对XML的解析1.SAX(simpleAPIforXML)2.DOM(DocumentObjectModel)3.ElementTree(元素树)python使用SAX解析xmlContentHandler类方法介绍make_parser方法parser方法parseString方法Python解析XML实例使用xml.dom解析xml什么是XML?XML......
  • SPI协议看这一篇就够了!(图文+代码+解析+仿真)
    目录SPI协议简介SPI工作原理实验需求模块图时序图小结SPI协议简介1.高速传输,SPI作为三大低速总线(UART、IIc、SPI)之一,其传输速度是这个个中最快的一个。它是一种高速、全双工、同步串行通信总线。所谓高速,指的是传输速度,最高能达到几十M/s,具体速度取决于硬件实现和时钟......
  • 深入解析 MyBatis:从理论到项目实例
    深入解析MyBatis:从理论到项目实例目录MyBatis概述MyBatis项目结构及作用核心概念详解分页功能的实现与深入剖析动态SQL缓存机制详解与Spring集成常见问题与深入分析完整项目示例总结1.MyBatis概述MyBatis是一个轻量级的持久层框架,使用SQL查询语句来访问数据......
  • xml解析读取 linqtoxml
    XML解析读取LINQtoXML\LINQtoXML\Program.csusingSystem;usingSystem.Linq;usingSystem.Xml.Linq;namespaceLINQtoXML{classProgram{publicvoidMethodSyntax(){varstudentsXML=XElement.Load("Students.xml&qu......
  • 谷歌SEO新纪元:深度解析蜘蛛池+泛目录站群推广秘籍
    谷歌SEO新纪元:深度解析蜘蛛池+泛目录站群推广秘籍什么是谷歌“蜘蛛”?对独立站运营有什么影响?#干货#科技#seo推荐阅读:百收软件蜘蛛池会员合集https://www.bsw80.com/post/1690.html这里是百收网SEO商学院,专注全套黑白帽SEO教学战群推广,我们今天主要是分享一个最新的一个......
  • 如何订阅支付DeepL,订阅DeepL Pro以及申请DeepL API?深度解析DeepL,虚拟信用卡WildCard绑
    十里不同音,五里不同调在现今世界中,跨语言的交流能力愈发重要,无论是国际友人之间的沟通交流,还是与客户或者合作伙伴之间的业务沟通,高质量的语言翻译都是一种刚性需求。今天,我们就来看一家这样的独角兽企业——一个机器翻译平台DeepL,它可以立即准确、轻松地将书面内容翻译......
  • msvcr100.dll丢失导致快吧迷你页异常?深度解析快吧迷你页msvcr100.dll文件丢失原因与修
    在使用快吧迷你页等软件时,有时会遇到“msvcr100.dll丢失”的错误提示,导致软件无法正常运行。这一问题主要由msvcr100.dll文件丢失或损坏引起,该文件是MicrosoftVisualC++2010RedistributablePackage中的一个重要组件,负责提供程序运行所需的运行时库支持。以下是对该问题的......
  • 2025年JavaWeb技术打造社区老人健康管理系统,3步轻松设计与实现,建议收藏!
    ✍✍计算机毕业编程指导师**⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java、Python、微信小程序、大数据实战项目集⚡⚡文末......
  • steam开风灵月影会不会封号?Steam玩家必看:风灵月影修改器使用与封号风险解析
    在Steam平台上使用风灵月影这类游戏修改器,其封号风险主要取决于玩家的具体使用方式和游戏类型。以下是对此问题的详细解析:一、风灵月影修改器的基本概述风灵月影修改器主要提供单机游戏的修改功能,通过修改游戏数据来增强玩家的游戏体验。这些修改器通常不会对Steam平台本身造......
  • 阿里云文档智能解析——大模型版能力最佳实践与体验评测
    一、引言随着数字化转型的深入,企业对于非结构化数据的处理需求日益增长。阿里云推出的文档智能解析服务旨在帮助企业快速高效地将各类文档转化为结构化信息,从而提升业务效率。本文旨在通过实际应用案例,对阿里云文档智能解析服务中的“文档解析(大模型版)”进行全面评测,并提出改......