当前位置:   article > 正文

Spring Boot实现文件上传与下载功能_springboot实现上传

springboot实现上传

一、引言

在现代Web应用中,文件上传与下载功能是非常常见的需求。Spring Boot作为一个轻量级的Java框架,通过其简化的配置和集成的特性,可以方便快速地实现这些功能。本文将详细介绍如何使用Spring Boot来实现文件上传与下载的功能,并附上相应的代码片段。

二、文件上传功能实现

依赖添加
首先,在pom.xml中添加必要的依赖,包括Spring Boot的Web和Multipart依赖:

<dependencies>  
    <!-- Spring Boot Web Starter -->  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-web</artifactId>  
    </dependency>  
    <!-- Spring Boot Multipart (for file upload) -->  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-data-jpa</artifactId>  
    </dependency>  
    <!-- 其他依赖... -->  
</dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

配置文件上传属性
在application.properties或application.yml中配置文件上传的相关属性:

properties

# application.properties  
spring.servlet.multipart.max-file-size=10MB  
spring.servlet.multipart.max-request-size=100MB
  • 1
  • 2
  • 3

这里设置了单个文件的最大大小为10MB,整个请求的最大大小为100MB。

创建文件上传Controller
创建一个Controller来处理文件上传请求:

import org.springframework.http.ResponseEntity;  
import org.springframework.web.bind.annotation.*;  
import org.springframework.web.multipart.MultipartFile;  
import java.io.File;  
import java.io.IOException;  
import java.nio.file.Files;  
import java.nio.file.Path;  
import java.nio.file.Paths;  
  
@RestController  
@RequestMapping("/files")  
public class FileUploadController {  
  
    private static final String UPLOADED_FOLDER = "/tmp/uploads/";  
  
    @PostMapping("/upload")  
    public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {  
        if (file.isEmpty()) {  
            return ResponseEntity.badRequest().body("请选择一个文件上传");  
        }  
  
        try {  
            byte[] bytes = file.getBytes();  
            Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());  
            Files.write(path, bytes);  
            return ResponseEntity.ok("文件上传成功:" + file.getOriginalFilename());  
        } catch (IOException e) {  
            e.printStackTrace();  
            return ResponseEntity.status(500).body("文件上传失败:" + e.getMessage());  
        }  
    }  
}
  • 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

在上面的代码中,我们创建了一个FileUploadController,其中包含一个处理POST请求的uploadFile方法。该方法接收一个MultipartFile类型的参数,表示上传的文件。然后,我们获取文件的字节数据并将其写入指定的路径。如果上传成功,则返回一条成功消息;如果上传失败,则返回错误信息。

三、文件下载功能实现

创建文件下载Controller
创建一个Controller来处理文件下载请求:

import org.springframework.core.io.FileSystemResource;  
import org.springframework.core.io.Resource;  
import org.springframework.http.HttpHeaders;  
import org.springframework.http.MediaType;  
import org.springframework.http.ResponseEntity;  
import org.springframework.web.bind.annotation.GetMapping;  
import org.springframework.web.bind.annotation.PathVariable;  
import org.springframework.web.bind.annotation.RestController;  
  
import java.io.IOException;  
import java.nio.file.Files;  
import java.nio.file.Path;  
import java.nio.file.Paths;  
  
@RestController  
@RequestMapping("/files")  
public class FileDownloadController {  
  
    private static final String UPLOADED_FOLDER = "/tmp/uploads/";  
  
    @GetMapping("/download/{filename:.+}")  
    public ResponseEntity<Resource> downloadFile(@PathVariable String filename) {  
        Path filePath = Paths.get(UPLOADED_FOLDER + filename);  
        Resource resource = null;  
        try {  
            if (Files.exists(filePath)) {  
                resource = new FileSystemResource(filePath);  
                return ResponseEntity.ok()  
                        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"")  
                        .contentType(MediaType.parseMediaType(Files.probeContentType(filePath)))
.body(resource);
} else {
return ResponseEntity.notFound().build();
}
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.status(500).body(null);
}
}
}
  • 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
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

在上面的代码中,我们创建了一个FileDownloadController,其中包含一个处理GET请求的downloadFile方法。该方法接收一个路径变量filename,表示要下载的文件名。然后,我们根据文件名构建文件路径,并检查文件是否存在。如果文件存在,我们创建一个FileSystemResource对象来表示文件资源,并设置响应的Content-DispositionContent-Type头信息,以便浏览器能够正确地处理文件下载。如果文件不存在或发生其他异常,我们返回相应的响应状态。

四、测试与部署

完成以上代码编写后,可以启动Spring Boot应用进行测试。你可以使用Postman或curl等工具来测试文件上传功能,使用浏览器来测试文件下载功能。确保上传的文件能够正确保存到指定的目录,并且能够通过下载链接正确下载文件。

在部署时,需要注意确保服务器上有足够的磁盘空间来存储上传的文件,并且配置好相应的文件读写权限。此外,还需要考虑文件的安全性和隐私保护,比如对上传的文件进行病毒扫描、限制文件类型和大小等。

五、总结

本文介绍了如何使用Spring Boot实现文件上传与下载功能,并提供了相应的代码片段。通过配置Spring Boot的相关属性和创建相应的Controller,我们可以方便地实现文件上传和下载的需求。在实际应用中,还需要根据具体需求进行进一步的优化和扩展,比如添加文件验证、处理大文件上传、实现断点续传等功能。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号