SpringBoot学习笔记(十:文件上传下载 )

举报
三分恶 发表于 2021/04/30 04:50:27 2021/04/30
【摘要】 文章目录 一、SpringMVC上传文件二、SpringBoot文件上传1、添加依赖2、配置3、上传单个文件4、上传多个文件5、文件下载 一、SpringMVC上传文件 Spring MVC 文件上传提供了良好的支持 ,而在 Spring Boot 更为简单地配置文件上传 所需的内容。 SpringMVC 中对文件上传做了封装,可...



一、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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。