SpringBoot学习笔记(十:文件上传下载 )
一、SpringMVC上传文件
Spring MVC 文件上传提供了良好的支持 ,而在 Spring Boot 更为简单地配置文件上传
所需的内容。
SpringMVC 中对文件上传做了封装,可以实现更简单地文件上传。从 Spring3.1 开始,对于文件上传,提供了两个处理器:
- CommonsMultipartResolver
- StandardServletMultipartResolver
第一个处理器兼容性较好,可以兼容 Servlet3.0 之前的版本,但是它依赖了 commons-fileupload 这个第三方工具,所以如果使用这个,一定要添加 commons-fileupload 依赖。
第二个处理器兼容性较差,它适用于 Servlet3.0 之后的版本,它不依赖第三方工具,使用它,可以直接做文件上传。
二、SpringBoot文件上传
我们这里采用StandardServletMultipartResolver处理器来上传文件:
1、添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
- 1
- 2
- 3
- 4
2、配置
#⽀持的最⼤⽂件
spring.servlet.multipart.max-file-size=100MB
#⽂件请求最⼤限制
spring.servlet.multipart.max-request-size=100MB
- 1
- 2
- 3
- 4
除了这两个配置之外常用的配置:
- spring.servlet.multipart.enabled=true,是否⽀持 multipart 上传⽂件
- spring.servlet.multipart.file-size-threshold=0,⽀持⽂件写⼊磁盘
- spring.servlet.multipart.location=,上传⽂件的临时⽬录
- spring.servlet.multipart.max-file-size=10Mb,最⼤⽀持⽂件⼤⼩
- spring.servlet.multipart.max-request-sizee=10Mb,最⼤⽀持请求⼤⼩
- spring.servlet.multipart.resolve-lazily=false,是否⽀持 multipart 上传⽂件时懒加载
3、上传单个文件
可以用SpringBoot默认的thymeleaf模板,这里就只写后端的接口。
同样地,偷了下懒,异常处理和结果封装都没有写……
/** * 上传单个文件 * * @param file * @param redirectAttributes * @return */ @PostMapping("/upload") public String singleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) { //文件非空判断 if (file.isEmpty()) { redirectAttributes.addFlashAttribute("message", "请选择一个文件"); return "文件为空,请重新上传"; } try { // Get the file and save it somewhere byte[] bytes = file.getBytes(); // UPLOADED_FOLDER ⽂件本地存储地址 Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename()); //保存文件 Files.write(path, bytes); } catch (IOException e) { e.printStackTrace(); } return "上传文件成功!"; }
- 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
用PostMan测试:
4、上传多个文件
稍作修改,MultipartFile 需要修改为按照数组的⽅式去接收。
/** * 上传多个文件 * * @param files * @param redirectAttributes * @return */ @PostMapping("/uploadMore") public String moreFileUpload(@RequestParam("file") MultipartFile[] files, RedirectAttributes redirectAttributes) { if (files.length == 0) { return "文件不能为空,请选择一个文件!"; } for (MultipartFile file : files) { try { byte[] bytes = file.getBytes(); Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename()); Files.write(path, bytes); } catch (IOException e) { e.printStackTrace(); } } return "所有文件上传成功!"; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
用PostMan测试:
5、文件下载
/** * 下载文件 * @param response * @param fileName * @return */ @GetMapping("/downloadFile") public String downloadFile(HttpServletResponse response, @RequestParam("fileName") String fileName) { File file = new File(UPLOADED_FOLDER+fileName); if (!file.exists()) { return "文件不存在!"; } response.reset(); response.setHeader("Content-Disposition", "attachment;fileName=" + fileName); try { InputStream inStream = new FileInputStream(fileName); OutputStream os = response.getOutputStream(); byte[] buff = new byte[1024]; int len = -1; while ((len = inStream.read(buff)) > 0) { os.write(buff, 0, len); } os.flush(); os.close(); inStream.close(); } catch (Exception e) { e.printStackTrace(); } return "下载成功!"; }
- 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
- 29
- 30
- 31
- 32
- 33
- 34
由于接口是get请求方式,所以直接用浏览器访问 localhost:8080/downloadFile?fileName=001.jpg:
本文为学习笔记类博客,学习资料来源见参考!
参考:
【1】:《精通 Spring Boot 42 讲》
【2】:SpringBoot | 第十七章:web应用开发之文件上传
【3】:《深入浅出SpringBoot2.X》
【4】:SpringMVC 教程–8. 文件上传
【5】:SpringBoot 文件上传、下载、设置大小
【6】:Spring Boot 上传文件
文章来源: blog.csdn.net,作者:三分恶,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/sinat_40770656/article/details/105210016
- 点赞
- 收藏
- 关注作者
评论(0)