SpringBoot实现文件上传和下载实现全过程(值得珍藏)

发布时间:2024年01月21日

1. 引言

在Web应用中,文件上传和下载是常见的需求。Spring Boot框架提供了强大的支持和便利的API,使得开发者可以轻松地实现文件上传和下载功能。本文将详细介绍如何在Spring Boot应用中实现文件上传和下载,包括实现原理和完整的代码示例。
在这里插入图片描述

2. 文件上传

2.1 添加依赖

首先,确保你的pom.xml文件中包含了Spring Boot的Web Starter依赖。这个依赖会包含实现文件上传所需的Servlet和相关类。

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-web</artifactId> 
</dependency>

2.2 配置文件上传大小限制

application.properties文件中,你可以配置文件上传的大小限制。例如,下面的配置允许上传最大为1MB的文件:

spring.servlet.multipart.max-file-size=1MB  
spring.servlet.multipart.max-request-size=1MB

2.3 创建上传控制器

创建一个控制器类,用于处理文件上传请求。在这个类中,使用@PostMapping注解指定处理POST请求的方法,并使用@RequestParam("file") MultipartFile file参数接收上传的文件。

// 导入需要的包和类  
import org.springframework.web.bind.annotation.*;  
import org.springframework.web.multipart.MultipartFile;  
import org.springframework.http.ResponseEntity;  
import org.springframework.http.HttpStatus;  
import org.springframework.core.io.Resource;  
import org.springframework.core.io.UrlResource;  
import org.springframework.core.io.InputStreamResource;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.*;  
import org.springframework.web.multipart.*;
   
  
// 创建文件上传控制器  
@RestController  
@RequestMapping("/api/upload")  
public class FileUploadController {  
    // 处理文件上传请求的POST方法  
    @PostMapping("/")  
    public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) {  
        try {  
            // 获取上传文件的文件名  
            String fileName = file.getOriginalFilename();  
            // 将文件保存到磁盘或执行其他操作,这里只是简单地将文件保存到静态资源目录下  
            file.transferTo(new File("src/main/resources/static/files/" + fileName));  
            return new ResponseEntity<>("文件上传成功!", HttpStatus.OK);  
        } catch (Exception e) {  
            return new ResponseEntity<>("文件上传失败:" + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);  
        }  
    }  
}  

2.4 创建下载控制器

创建一个控制器类,用于处理文件下载请求。在这个类中,我们将使用@GetMapping注解指定处理GET请求的方法,并使用@RequestParam("filename") String fileName参数接收要下载的文件名。然后,我们可以使用文件名来获取要下载的文件,并将其作为响应返回给客户端。

为了让Spring Boot能够找到静态资源(如文件),你需要在src/main/resources目录下创建一个名为static的文件夹,并在其中创建一个名为files的文件夹,用于存放要下载的文件。

import org.springframework.web.bind.annotation.*;  
import org.springframework.web.multipart.MultipartFile;  
import org.springframework.http.ResponseEntity;  
import org.springframework.http.HttpStatus;  
import org.springframework.core.io.Resource;  
import org.springframework.core.io.UrlResource;  
import org.springframework.core.io.InputStreamResource;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.*;  
import org.springframework.web.multipart.*;

// 创建文件下载控制器  
@RestController  
@RequestMapping("/api/download")  
public class FileDownloadController {  
    // 处理文件下载请求的GET方法,通过文件名获取文件并返回给客户端下载  
    @GetMapping("/{filename:.+}")  
    public ResponseEntity<Resource> handleFileDownload(@PathVariable String filename) throws IOException {  
        // 获取要下载的文件的Resource对象,这里假设文件保存在静态资源目录下的files文件夹中  
        ResourceLoader resourceLoader = new ResourceLoader("classpath:");  
        Resource resource = resourceLoader.getResource("classpath:static/files/" + filename);  
        if (resource == null) {  
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body("文件不存在");  
        }  
        // 将文件内容包装为响应体,并设置响应头信息,提示浏览器下载文件而不是打开文件  
        InputStreamResource inputStreamResource = new InputStreamResource(resource.getInputStream());  
        HttpHeaders headers = new HttpHeaders();  
        headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + filename);  
        return ResponseEntity.ok()  
                .headers(headers)  
                .contentType(MediaTypeFactory.getMediaType(resource))  
                .body(inputStreamResource);  
    }  
}

3. 总结

通过以上步骤,你可以在Spring Boot应用中实现文件上传和下载功能。文件上传通过POST请求实现,将文件作为请求的一部分发送到服务器。文件下载通过GET请求实现,根据文件名从服务器上获取文件内容,并通过浏览器下载。在这个过程中,Spring Boot框架提供了丰富的API和便利的配置选项,使得开发者可以轻松地实现这些功能。

文章来源:https://blog.csdn.net/a342874650/article/details/135723978
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。