SpringBoot实现文件上传的多种方式
我们平时在项目开发过程中,会遇到许多的文件上传与下载的需求,今天我们就来梳理一下文件上传的代码实现,基于SpringBoot 快速搭建服务,集成文件上传功能,包括传统的文件上传方式,也拓展OSS对象存储方式。项目类型是Maven项目
一、引入web依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
二、application.yml配置
在application.yml设置文件上传大小,以及文件上传路径和显示路径。maxFileSize 是单个文件大小,maxRequestSize是设置总上传的数据大小,文件配置大小的规则就是根据你的需求来设置。比如,如果只是上传图片,不管是单图上传还是多图上传,几十兆基本都能满足要求,如果是上传视频,则文件大小基本都是上百兆。
这里有一个需要注意的就是application.yml里面的配置需要根据SpringBoot的版本来定,上面配置的是当前比较常用的版本,基于SpringBoot 2.x,但如果是SpringBoot 1.x,比如1.5版本,可以参考以下的配置(区别在于一个是http,一个是servlet)
除了在application.yml 中配置变量,也可以直接在Java代码里面配置:
/** * @Description 上传文件配置 * @author 编程侠 * @param * @param MultipartConfigElement */ public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); //文件最大30M,DataUnit提供五种类型B,KB,MB,GB,TB factory.setMaxFileSize(DataSize.of(30, DataUnit.MEGABYTES)); /// 设置总上传数据总大小200M factory.setMaxRequestSize(DataSize.of(300, DataUnit.MEGABYTES)); return factory.createMultipartConfig(); }
三、文件上传
1、前端代码
最简单的就是使用经典的form表单和input上传。 设置form的aciton为后端请求,enctype=“multipart/form-data”,type=‘post’。
说明:
(1)enctype 设置 multipart/form-data ,原因:指定传输数据为二进制类型,比如图片、mp3、文件。 这个一般文件上传时用。它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法,type="file",浏览器会把整个表单以控件为单位分割。
(2)一般的上传只需要上传文件即可,但时候我们需要额外传参,以此来绑定文件跟用户的关联关系等,这个时候你就可以设置隐藏域,然后在后端使用request.getParameter 接收。
2、后端代码
Controller层代码实现,主要思路就是上传文件到指定的目录下,上传成功拼接显示地址(直接使用上传的地址无法在前端展示,是通过显示路径拼接后展示的),就可以在页面上进行展示了。
如果是多文件上传,上传的方法做出适当的调整。因为接收的文件对象不再是一个了,改用数组接收。
四、对象oss存储
除了传统的存储方式,现在对象oss存储也非常的流行,市场上常用的有阿里云、华为云,七牛云等,为什么需要使用到对象存储呢?oss存储是很多大型互联网公司针对图片、文件以及其他内容的存储使用的一种较为流行的方式,它以响应快,性能高,成本低、安全系数高深受业界大佬推崇。我们这里以阿里云OSS文件存储为例,其他家的接入方法类似。
阿里云OSS上传文件步骤:
1、开通阿里云OSS服务,创建bucket,创建AccessKey,拿到阿里云OSS相关的配置文件,拿到配置文件后,我们就可以放入到项目的配置文件application.yml中。
2、引入项目需要的依赖,maven项目直接在pom.xml中添加依赖。
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
</dependency>
3、创建一个读取配置的类,后续业务处理上传到OSS时,从该配置类获取参数。
4、业务处理,一般完整的业务处理流程是:拿到生成文件的本地临时路径和文件数据。在本地临时目下生成文件。将本地文件上传到OSS,返回oss的全路径;删除本地临时目录、文件。
参考文章:http://blog.ncmem.com/wordpress/2023/09/28/springboot%e5%ae%9e%e7%8e%b0%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e7%9a%84%e5%a4%9a%e7%a7%8d%e6%96%b9%e5%bc%8f/
欢迎入群一起讨论