Spring Boot实现文件上传和下载

这篇具有很好参考价值的文章主要介绍了Spring Boot实现文件上传和下载。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现Spring Boot文件上传和下载的步骤:

1.文件上传

  • 在pom.xml文件中添加依赖:spring-boot-starter-webspring-boot-starter-thymeleaf
  • 创建一个上传前端的页面,包括一个表单来选择文件和一个提交按钮。
  • 在Controller中添加一个POST方法,该方法接受MultipartFile参数,将文件保存在服务器上。
  • 在application.properties文件中配置上传文件的最大大小和文件存储路径。

2.文件下载

  • 在Controller中添加一个GET方法,该方法接收一个文件名参数,通过ResponseEntity将文件内容返回给客户端。
  • 如果需要授权访问,则可以通过使用Spring Security实现基本身份验证。

以下是Spring Boot实现文件上传和下载的代码示例:文章来源地址https://www.toymoban.com/news/detail-442646.html

1.文件上传
  • pom.xml依赖配置:
<!-- 文件上传 -->
<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.3.3</version>
</dependency>

<!-- Servlet API -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
  <scope>provided</scope>
</dependency>
  • 在配置文件中配置:
    # 开启上传和下载
    spring.servlet.multipart.enabled=true
    # 最大的文件大小
    spring.servlet.multipart.max-file-size=30MB
    # 单次最大请求大小
    spring.servlet.multipart.max-request-size=30MB
    # 自定义的上传文件存放路径
    file.upload.dir=e:/test
    
  • 在Controller中添加一个POST方法:
@PostMapping("/upload")
@ResponseBody
public String upload(@RequestParam("file") MultipartFile file) {
    if (file.isEmpty()) {
        return "上传失败,请选择文件";
    }

    // 获取文件名
    String fileName = file.getOriginalFilename();
    // 获取文件的后缀名
    String suffixName = fileName.substring(fileName.lastIndexOf("."));

    // 上传后的路径
    String filePath = "D:/upload/";

    // 解决中文问题,liunx下中文路径,图片显示问题
    fileName = UUID.randomUUID() + suffixName;

    // 构建上传路径
    File dest = new File(filePath + fileName);

    // 检测是否存在目录
    if (!dest.getParentFile().exists()) {
        dest.getParentFile().mkdirs();
    }

    try {
        // 保存文件
        file.transferTo(dest);
        return "上传成功";
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return "上传失败";
}
2.文件下载
  • 在Controller中添加一个GET方法:
@GetMapping("/download")
public ResponseEntity<byte[]> download() throws IOException {
    // 获取文件
    File file = new File("D:/upload/1.jpg");

    // 构造响应
    HttpHeaders headers = new HttpHeaders();
    headers.setContentDispositionFormData("attachment", file.getName());
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    return new ResponseEntity<>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
}
编写Controller方法
@GetMapping("/download")
public void downloadFile(HttpServletResponse response) {
    try {
        //获取要下载的文件
        File file = new File("file_path");

        //设置响应的内容类型为二进制流,即文件类型
        response.setContentType("application/octet-stream");

        //设置文件名
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getName(), "UTF-8"));

        //创建输入流
        FileInputStream inputStream = new FileInputStream(file);
        BufferedInputStream buffInputStream = new BufferedInputStream(inputStream);

        //创建输出流
        ServletOutputStream outputStream = response.getOutputStream();
        BufferedOutputStream buffOutputStream = new BufferedOutputStream(outputStream);

        //循环读取数据并写入到响应输出流中
        byte[] buffer = new byte[1024];
        int len = -1;
        while ((len = buffInputStream.read(buffer)) != -1) {
            buffOutputStream.write(buffer, 0, len);
        }

        //关闭流
        buffOutputStream.flush();
        buffOutputStream.close();
        outputStream.flush();
        outputStream.close();
        buffInputStream.close();
        inputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
SpringBoot中,我们可以通过以下步骤实现文件响应给浏览器实现下载:

在Controller中编写请求处理方法,并使用@GetMapping注解来指定该方法处理GET请求。

在方法中使用InputStreamResource将本地文件以流的形式读取到内存中。

使用ResponseEntity.ok()方法构造响应,并将之前获取到的InputStreamResource作为参数传入。

使用.header()方法设置响应头,包括Content-DispositionContent-Type等信息。

以下是一个示例代码:

import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

@Controller
public class FileDownloadController {
    
    @GetMapping("/download")
    public ResponseEntity<InputStreamResource> downloadFile() throws IOException {
        String filename = "example.txt";
        InputStream is = new FileInputStream(filename);
        InputStreamResource resource = new InputStreamResource(is);
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Disposition", "attachment; filename=\"" + filename + "\"");
        headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
        headers.add("Pragma", "no-cache");
        headers.add("Expires", "0");
        
        return ResponseEntity.ok()
                .headers(headers)
                .contentLength(is.available())
                .contentType(MediaType.parseMediaType("application/octet-stream"))
                .body(resource);
    }
}
其中,Content-Disposition头用于描述响应结果的类型,这里指定为attachment表示要下载的文件,filename表示文件名。

Cache-ControlPragmaExpires头用于控制缓存的行为,这里设为不缓存。

最后将InputStreamResource对象作为响应体返回即可。


到了这里,关于Spring Boot实现文件上传和下载的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot 实现多文件上传

    代码结构: Controller层 跨域拦截器配置 application.properties 配置 前端页面 效果展示 获取图片的url并且读取图片 修改tomcat的server.xml文件 加上下面这句

    2023年04月08日
    浏览(36)
  • Spring Boot 实现文件本地以及OSS上传

    Maven依赖 封装工具类 上面的代码我们可以定义一个工具类,这样在任何需要文件上传的地方只需要调用 upload 方法即可,大大减少了代码量 使用工具类

    2024年03月08日
    浏览(35)
  • Spring Boot实现文件上传的两种方式

    最近的一个小项目里使用到了文件上传、下载功能,今天我打算梳理一下文件上传所涉及的技术及实现。 内容主要包括两部分,如何通过纯 Servlet 的形式进行文件上传、保存(不通过 Spring 框架);另一部分是如何在 Spring Web MVC 中进行文件上传。 HTTP 协议传输文件一般都遵循

    2024年02月05日
    浏览(35)
  • Spring boot实现上传文件至本地或服务器

    大家好 我是程序猿小张 图片文件上传是项目中必不可少的一个功能,上传的地址也当然是优先选择第三方的对象存储,例如七牛云、阿里云等等,但是当中的话只有七牛云是有一个免费额度的,其他都是要收钱的。所以就想着,哎,这个能不能上传到本地呢?答案是肯定可

    2024年02月11日
    浏览(42)
  • Spring Boot + MinIO 实现文件切片极速上传技术

    🎉欢迎来到SpringBoot框架学习专栏~ ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:SpringBoot 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指

    2024年02月04日
    浏览(43)
  • Spring Boot 实现文件断点下载,实战来了!

    来源:juejin.cn/post/7026372482110079012 互联网的连接速度慢且不稳定,有可能由于网络故障导致断开连接。 在客户端下载一个大对象时,因网络断开导致上传下载失败的概率就会变得不可忽视。 客户端在 GET 对象请求时通过设置 Range 头部来告诉接口服务需要从什么位置开始输出对

    2024年02月16日
    浏览(39)
  • Spring Boot实现对超大文件进行异步压缩下载

     在Web应用中,文件下载功能是一个常见的需求,特别是当你需要提供用户下载各种类型的文件时。本文将演示如何使用Spring Boot框架来实现一个简单而强大的文件下载功能。我们将创建一个RESTful API,通过该API,用户可以下载问价为ZIP压缩文件。 首先,确保你已经创建了一个

    2024年02月07日
    浏览(40)
  • JAVA面试题分享五百一十一:Spring Boot基于WebUploader实现超大文件上传和断点续传

    目录 前言 目标 实现思路 大文件分片 合并分片 断点续传 代码实现 1、webuploader组件中,分片上传怎么开启? 2、webuploader组件中,文件的md5值如何计算? 3、webuploader组件中,分片文件的md5值如何计算? 4、webuploader组件中,分片上传的的请求在哪里触发? 5、前端、后端如何校

    2024年02月19日
    浏览(40)
  • Spring Boot实现HTTP大文件断点续传分片下载-大视频分段渐进式播放

    服务端如何将一个大视频文件做切分,分段响应给客户端,让浏览器可以渐进式地播放。 Spring Boot实现HTTP分片下载断点续传,从而实现H5页面的大视频播放问题,实现渐进式播放,每次只播放需要播放的内容就可以了,不需要加载整个文件到内存中。 文件的断点续传、文件多

    2024年02月14日
    浏览(54)
  • spring boot文件上传

    文件上传,是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。 文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。 前端代码: 后端代码: 对于阿里云的oss的使用可阅读对象存储 OSS官方文档 导入依赖

    2024年02月08日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包