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/)
目录
相关文章
|
1月前
|
XML Java Maven
springboot-多环境配置文件
本文介绍了如何创建开发和生产环境的配置文件,并在IDEA和Maven中进行配置。开发环境中,通过设置profile为`dev`来指定配置文件;生产环境中,使用Maven命令参数`-Pprod`打包并指定配置文件。公共配置可放在`application.yml`中统一管理。日志配置需确保`logback-spring.xml`中的profile正确,以保证日志正常输出。
springboot-多环境配置文件
|
27天前
|
XML 前端开发 Java
SpringBoot实现文件上传下载功能
本文介绍了如何使用SpringBoot实现文件上传与下载功能,涵盖配置和代码实现。包括Maven依赖配置(如`spring-boot-starter-web`和`spring-boot-starter-thymeleaf`)、前端HTML页面设计、WebConfig路径映射配置、YAML文件路径设置,以及核心的文件上传(通过`MultipartFile`处理)和下载(利用`ResponseEntity`返回文件流)功能的Java代码实现。文章由Colorful_WP撰写,内容详实,适合开发者学习参考。
|
2月前
|
存储 前端开发 Java
Springboot静态资源映射及文件映射
在Spring Boot项目中,为了解决前端访问后端存储的图片问题,起初尝试通过静态资源映射实现,但发现这种方式仅能访问打包时已存在的文件。对于动态上传的图片(如头像),需采用资源映射配置,将特定路径映射到服务器上的文件夹,确保新上传的图片能即时访问。例如,通过`addResourceHandler(&quot;/img/**&quot;).addResourceLocations(&quot;file:E:\\myProject\\forum_server\\&quot;)`配置,使前端可通过URL直接访问图片。
148 0
Springboot静态资源映射及文件映射
|
1月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
5月前
|
Java 应用服务中间件
SpringBoot获取项目文件的绝对路径和相对路径
SpringBoot获取项目文件的绝对路径和相对路径
246 1
SpringBoot获取项目文件的绝对路径和相对路径
|
6月前
|
XML Java Kotlin
springboot + minio + kkfile实现文件预览
本文介绍了如何在容器中安装和启动kkfileviewer,并通过Spring Boot集成MinIO实现文件上传与预览功能。首先,通过下载kkfileviewer源码并构建Docker镜像来部署文件预览服务。接着,在Spring Boot项目中添加MinIO依赖,配置MinIO客户端,并实现文件上传与获取预览链接的接口。最后,通过测试验证文件上传和预览功能的正确性。
478 4
springboot + minio + kkfile实现文件预览
|
5月前
|
网络协议 Java
springboot配置hosts文件
springboot配置hosts文件
97 11
|
5月前
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
316 8
|
5月前
|
存储 前端开发 JavaScript
|
5月前
|
存储 Java API

热门文章

最新文章

下一篇
oss创建bucket