文章目录
- 前言
- 1. 文件上传
-
- 1.1 文件上传介绍
- 1.2 文件上传实现
-
- 1.2.1 添加依赖
- 1.2.2 配置上传解析器
- 1.2.3 通过表单上传
- 1.2.4 创建控制器类
- 1.2.5 上传演示
- 2. 文件下载
-
- 2.1文件下载的实现
-
- 2.1.1 客服端创建超链接
- 2.1.2 创建控制器类
- 2.1.3 下载演示
前言
文件的上传和下载是项目开发中非常常见的功能,例如图片、邮件附件的上传与下载,下载与上传音频、视频等。
1. 文件上传
1.1 文件上传介绍
文件上传是通过表单的形式提交给服务器的,因此,实现文件的上传,就需要一个提供上传的表单,而这个表单则必须满足以下三个条件。
- form表单的method属性为post
- form表单的enctype属性为multipart/form-data
- 使用
<input type="file" name="filename"/>
为文件上传输入框
示例代码如下:
<form action="${}/fileUpload" method="post" enctype="multipart/form-data">
<input type="file" name="photo" multiple>
<input type="submit" value="上传"/>
</form>
- 1
- 2
- 3
- 4
注意:使用 multiple 属性,则可以同时选择多个文件上传。
enctype=multipart/form-data:该属性表明发送的请求体的内容是多表单元素的,通俗点讲,就是有各种各样的数据,可能有二进制数据,也可能有表单数据。当使用该属性时,浏览器就会采用二进制流的方式来处理表单数据,服务器端就会对文件上传的请求进行解析处理。
1.2 文件上传实现
1.2.1 添加依赖
Spring NVC 的文件上传需要依赖Apache Commons FileUpload的组件,即需要添加支持文件上传的依赖。
<!-- /artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
- 1
- 2
- 3
- 4
- 5
- 6
1.2.2 配置上传解析器
Spring MVC 为文件的上传提供了直接的支持,而这个支持是通过MultipartResolver对象实现。MultipartResolver是一个接口,需要他的实现类CommonsMultipartResolver来完成文件上传。而在Spring MVC中使用该对象,只需在配置文件中定义一个MultipartResolver接口的Bean即可。
<!-- 配置文件上传解析器,将上传的文件封装为CommonsMultipartFile -->
<bean class="">
<property name="defaultEncoding" value="UTF-8"/>
</bean>
- 1
- 2
- 3
- 4
注意: 配置CommonsMultipartResolver时必须指定该bean的id为multipartResolver。
MultipartResolver的属性:
属性名
作用
maxUploadSize
上传文件的最大长度
maxInMemorySize
缓存中的最大尺寸
resolveLazily
推迟文件解析
defaultEncoding
默认编码格式
1.2.3 通过表单上传
<form action="${}/fileUpload" method="post" enctype="multipart/form-data">
<input type="file" name="photo" multiple>
<input type="submit" value="上传"/>
</form>
- 1
- 2
- 3
- 4
1.2.4 创建控制器类
@Controller
public class FileUploadController {
@RequestMapping("/fileUpload")
public String testFileUpload(MultipartFile photo, HttpSession session) throws IOException {
String filename = ();
ServletContext servletContext = ();
String realPath = ("photo");
File file = new File(realPath);
//判断realPath对应的路径是否存在
if (!()){
//不存在就创建
();
}
String finalPath = realPath + + filename;
(new File(finalPath));
return "success";
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 文件上传位置:
1.2.5 上传演示
查看上传结果,可以看到上传成功了!!!
2. 文件下载
2.1文件下载的实现
文件下载就是将文件服务器中的文件下载到本地。
2.1.1 客服端创建超链接
需要先在文件下载目录中添加一个文件
<a href="${}/fileDownload">下载</a>
- 1
2.1.2 创建控制器类
使用Spring MVC提供的文件下载方法进行文件下载,Spring MVC为我们提供了一个ResponseEntity类型的对象来实现文件的下载。
@Controller
public class FileDownloadController {
@RequestMapping("/fileDownload")
public ResponseEntity<byte[]> testFileDownload(HttpSession session) throws IOException {
//获取ServletContext对象
ServletContext servletContext = ();
//文件的真实路径
String realPath = ("static/img/");
//创建输入流
InputStream inputStream = new FileInputStream(realPath);
//创建字节数组
byte[] bytes = new byte[()];
//将流读到字节数组中
(bytes);
//创建HttpHeaders对象,设置响应头信息
MultiValueMap<String,String> headers = new HttpHeaders();
//设置下载方式和下载文件的名称 attachment表示以附件的形式下载
("Content-Disposition","attachment;filename=");
//设置响应状态码
HttpStatus status = ;
//创建ResponseEntity对象
ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes,headers,status);
//关闭输入流
();
return responseEntity;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
2.1.3 下载演示
可以看到跟我们平时下载文件是一样的。