SpringBoot文件上传下载

简介: SpringBoot文件上传下载


@[Toc]



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


2、配置

#⽀持的最⼤⽂件
spring.servlet.multipart.max-file-size=100MB
#⽂件请求最⼤限制
spring.servlet.multipart.max-request-size=100MB

除了这两个配置之外常用的配置:

  • 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 "上传文件成功!";
    }


用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 "所有文件上传成功!";
    }

用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 "下载成功!";
    }

由于接口是get请求方式,所以直接用浏览器访问 localhost:8080/downloadFile?fileName=001.jpg:

在这里插入图片描述




本文为学习笔记类博客,学习资料来源见参考!
参考: 【1】:《精通 Spring Boot 42 讲》 【2】:[SpringBoot | 第十七章:web应用开发之文件上传 ](https://blog.lqdev.cn/2018/08/07/springboot/chapter-seventeen/) 【3】:《深入浅出SpringBoot2.X》 【4】:[SpringMVC 教程--8. 文件上传](http://springmvc.javaboy.org/2019/1110/fileupload) 【5】:[SpringBoot 文件上传、下载、设置大小](https://www.cnblogs.com/chevin/p/9260842.html) 【6】:[Spring Boot 上传文件](https://www.itcto.cn/springboot/spring-boot-file/)
目录
相关文章
|
2月前
|
Java
SpringBoot文件上传单文件多文件上传
SpringBoot文件上传单文件多文件上传
24 0
|
2月前
|
XML JavaScript 前端开发
springboot配合Freemark模板生成word,前台vue接收并下载【步骤详解并奉上源码】
springboot配合Freemark模板生成word,前台vue接收并下载【步骤详解并奉上源码】
|
11天前
|
Java
软件开发常用之SpringBoot文件下载接口编写(下),Vue+SpringBoot文件上传下载预览,服务器默认上传是1M,可以调节,调节文件上传大小写法,图片预览,如何预览后下次还能看到,预览写法
软件开发常用之SpringBoot文件下载接口编写(下),Vue+SpringBoot文件上传下载预览,服务器默认上传是1M,可以调节,调节文件上传大小写法,图片预览,如何预览后下次还能看到,预览写法
|
25天前
|
前端开发 安全 Java
实现Spring Boot中的文件分片上传通常涉及到以下几个步骤和考虑的关键点
实现Spring Boot中的文件分片上传通常涉及到以下几个步骤和考虑的关键点
35 2
|
25天前
|
Java
基于SpringBoot的餐厅会员管理信息系统【程序资源下载】
基于SpringBoot的餐厅会员管理信息系统【程序资源下载】
11 1
|
2月前
|
安全 JavaScript Java
springboot实现文件防盗链设计
`shigen`,一位专注于Java、Python、Vue和Shell的博主,分享成长和技术。近期将探讨SpringBoot实现图片防盗链,通过限制`Referer`防止资源被盗用。基础版通过`WebMvcConfigurer`配置静态资源,升级版添加拦截器检查`Referer`,确保请求来源合法性。详细代码实现和案例可在文中链接找到。一起学习,每天进步!
76 14
springboot实现文件防盗链设计
|
11天前
|
Java 文件存储
软件开发常用之SpringBoot文件上传和下载功能(上){fileName},利用hutool提供的依赖,拿到当前目录的路径,System.getProperty从变量获取路径 ,不存在就用mkdi
软件开发常用之SpringBoot文件上传和下载功能(上){fileName},利用hutool提供的依赖,拿到当前目录的路径,System.getProperty从变量获取路径 ,不存在就用mkdi
|
11天前
|
Java
springBoot如何设置yml文件,设置端口号
springBoot如何设置yml文件,设置端口号
|
17天前
|
Java Maven
SpringBoot快速入门,写一个简单的HelloWorld文件
SpringBoot快速入门,写一个简单的HelloWorld文件
|
20天前
|
Java 测试技术 数据库
【单文件版本】java SpringBoot 切换不同的运行环境(生产环境、开发环境、测试环境)SpringBoot配置多个不同运营环境
【单文件版本】java SpringBoot 切换不同的运行环境(生产环境、开发环境、测试环境)SpringBoot配置多个不同运营环境
19 0