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

网友投稿 898 2022-05-29

文章目录

一、SpringMVC上传文件

二、SpringBoot文件上传

1、添加依赖

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

2、配置

3、上传单个文件

4、上传多个文件

5、文件下载

一、SpringMVC上传文件

Spring MVC 文件上传提供了良好的支持 ,而在 Spring Boot 更为简单地配置文件上传

所需的内容。

SpringMVC 中对文件上传做了封装,可以实现更简单地文件上传。从 Spring3.1 开始,对于文件上传,提供了两个处理器:

CommonsMultipartResolver

StandardServletMultipartResolver

第一个处理器兼容性较好,可以兼容 Servlet3.0 之前的版本,但是它依赖了 commons-fileupload 这个第三方工具,所以如果使用这个,一定要添加 commons-fileupload 依赖。

第二个处理器兼容性较差,它适用于 Servlet3.0 之后的版本,它不依赖第三方工具,使用它,可以直接做文件上传。

二、SpringBoot文件上传

我们这里采用StandardServletMultipartResolver处理器来上传文件:

1、添加依赖

org.springframework.boot spring-boot-starter-thymeleaf

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 上传文件

Spring Spring Boot

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python进阶(七)-浅谈python3和Python2的区别
下一篇:机器人工程专业讲师的工作经历和体会
相关文章