前言
MultipartFile是spring类型,代表HTML中form data方式上传的文件,包含二进制数据+文件名称。在文件上传这方面能帮助我们快速简洁实现。
使用
1、yml配置文件
spring:
servlet:
multipart:
max-file-size: 10MB #单个最大文件大小,默认是1MB
max-request-size: 100MB #总请求文件大小
2、API介绍
multipartFile.getContentType()//在控制台打印文件的类型
multipartFile.getName()//返回文件的名称
multipartFile.getOriginalFilename()//返回文件的原文件名
multipartFile.getSize() //单位为字节
multipartFile.getInputStream() //文件转换为输入流
multipartFile.transferTo(new File("D:/"));
/*上传的文件需要保存的路径和文件名称,
本质上还是使用了流,只不过是封装了步骤,相当于:
File file = new File("D:/");
file.createNewFile();
FileOutputStream stream = new FileOutputStream(file);
stream.write(multipartFile.getBytes());
stream.close();
*/
3、文件上传示例
@RestController
@Slf4j
public class UploadTest {
@RequestMapping("/upload")
public String upLoad(@RequestPart("file") MultipartFile multipartFile){
log.info("文件上传开始");
log.info("文件{}",multipartFile.getOriginalFilename());
if (!multipartFile.isEmpty()){
try {
//上传的文件需要保存的路径和文件名称,路径需要存在,否则报错
multipartFile.transferTo(new File("D:/"++multipartFile.getOriginalFilename()));
} catch (IllegalStateException | IOException e){
e.printStackTrace();
return "上传失败";
}
} else {
return "请上传文件";
}
return "上传成功";
}
}
注意:
@RequestPart("file")
主要用来处理content-type为 multipart/form-data 或 multipart/mixed stream 发起的请求,可以获取请求中的参数。
因此在此处,前端上传文件时,key为file,value为文件。
4、postman测试
由于本人只会后端不会做前端,懒得查资料写前端上传文件功能,就使用postman进行测试。
1、将请求方式改为post。
2、Headers中设置设置key=Content-Type,value=multipart/form-data(默认已设置)。
3、在Body中选择form-data,选择File格式,KEY填写在后端代码中编写的@RequestPart(“file”)中的file,value选择你想要上传的文件。
4、点击send即可实现上传功能。
文件下载
既然文件上传功能有了,就在此介绍一下如何实现文件下载功能。
@RestController
public class DownTest {
@RequestMapping("/download")
public ResponseEntity<Object> download() throws IOException {
//提供下载的文件的路径
FileSystemResource file = new FileSystemResource("D:\\cloud/pom.xml");
HttpHeaders headers = new HttpHeaders();
headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
//这里定制下载文件的名称
headers.add("Content-Disposition", String.format("attachment; filename=\"%s\"", file.getFilename()));
headers.add("Pragma", "no-cache");
headers.add("Expires", "0");
return ResponseEntity.ok()
.headers(headers)
.contentLength(file.contentLength())
.contentType(MediaType.parseMediaType("application/octet-stream"))//以二进制流的形式返回
.body(new InputStreamResource(file.getInputStream()));
}
}
版权声明:本文为weixin_45866737原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。