赞
踩
在现代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>
配置文件上传属性
在application.properties或application.yml中配置文件上传的相关属性:
properties
# application.properties
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=100MB
这里设置了单个文件的最大大小为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()); } } }
在上面的代码中,我们创建了一个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); } } }
在上面的代码中,我们创建了一个FileDownloadController
,其中包含一个处理GET请求的downloadFile
方法。该方法接收一个路径变量filename
,表示要下载的文件名。然后,我们根据文件名构建文件路径,并检查文件是否存在。如果文件存在,我们创建一个FileSystemResource
对象来表示文件资源,并设置响应的Content-Disposition
和Content-Type
头信息,以便浏览器能够正确地处理文件下载。如果文件不存在或发生其他异常,我们返回相应的响应状态。
完成以上代码编写后,可以启动Spring Boot应用进行测试。你可以使用Postman或curl等工具来测试文件上传功能,使用浏览器来测试文件下载功能。确保上传的文件能够正确保存到指定的目录,并且能够通过下载链接正确下载文件。
在部署时,需要注意确保服务器上有足够的磁盘空间来存储上传的文件,并且配置好相应的文件读写权限。此外,还需要考虑文件的安全性和隐私保护,比如对上传的文件进行病毒扫描、限制文件类型和大小等。
本文介绍了如何使用Spring Boot实现文件上传与下载功能,并提供了相应的代码片段。通过配置Spring Boot的相关属性和创建相应的Controller,我们可以方便地实现文件上传和下载的需求。在实际应用中,还需要根据具体需求进行进一步的优化和扩展,比如添加文件验证、处理大文件上传、实现断点续传等功能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。