Spring Boot 实现文件上传下载的详细教程

0 下载量 121 浏览量 更新于2024-09-03 收藏 267KB PDF 举报
"Spring Boot 文件上传与下载的示例代码" 在Spring Boot框架中,文件上传和下载是常见的功能需求,特别是在构建Web应用程序时。本文将详细介绍如何在Spring Boot项目中实现这一功能,包括创建REST API、使用Postman进行测试以及构建前端界面进行交互。 首先,确保你的开发环境已经配置了Spring Boot 2.1.3.RELEASE、Gradle 5.2.1、Java 1.8以及IntelliJ IDEA 2018.3.3。在IntelliJ IDEA中,通过Spring Initializr创建新项目,选择Maven或Gradle作为构建工具,并添加Web依赖。 项目创建完成后,需要配置Spring Boot以支持文件上传。打开`application.properties`文件,添加以下配置项来启用multipart上传并设定文件大小限制: ```properties server.port=80 spring.servlet.multipart.enabled=true spring.servlet.multipart.file-size-threshold=2KB spring.servlet.multipart.max-file-size=200MB spring.servlet.multipart.max-request-size=215MB ``` 这里设置了服务器监听的端口、启用multipart上传,以及设置文件上传的大小限制。`file-size-threshold`表示文件在内存中达到的大小阈值,超过这个值就会被写入到磁盘。`max-file-size`和`max-request-size`分别限制了单个文件和整个请求的最大大小。 接下来,创建一个Controller,用于处理文件上传和下载的HTTP请求。在Controller中,你可以定义两个主要的方法:一个用于文件上传,一个用于文件下载。例如: ```java import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; @RestController @RequestMapping("/files") public class FileController { @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) { // 文件上传逻辑 // ... return "文件上传成功"; } @GetMapping("/download/{filename}") public ResponseEntity<Void> downloadFile(@PathVariable String filename, HttpServletResponse response) throws IOException { // 文件下载逻辑 // ... return ResponseEntity.ok() .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + filename) .body(null); } } ``` 在`handleFileUpload`方法中,`MultipartFile`参数用于接收上传的文件。你可以将文件保存到服务器的指定目录,并返回一个成功消息。在`downloadFile`方法中,根据文件名从服务器上读取文件,并设置响应头以指示浏览器以附件形式下载文件。 为了测试这些API,可以使用Postman发送POST请求到`/files/upload`,附带文件作为请求体。对于下载,发送GET请求到`/files/download/{filename}`,其中`{filename}`是你要下载的文件名。 为了提供一个完整的用户界面,可以使用HTML、CSS和JavaScript创建一个简单的Web页面,通过AJAX调用这些API。例如,使用jQuery的`$.ajax`方法: ```html <!DOCTYPE html> <html lang="en"> <head> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> </head> <body> <input type="file" id="uploadFile"> <button id="uploadBtn">上传</button> <ul id="filesList"></ul> <a id="downloadLink" href="#">下载</a> <script> $(document).ready(function () { $('#uploadBtn').click(function () { var file = $('#uploadFile')[0].files[0]; $.ajax({ url: '/files/upload', type: 'POST', data: file, processData: false, contentType: false, success: function (response) { alert('文件上传成功'); }, error: function (err) { console.error(err); } }); }); // 下载逻辑 // ... }); </script> </body> </html> ``` 以上代码创建了一个文件输入字段和上传按钮,当点击上传按钮时,它会触发AJAX请求将文件上传到服务器。下载链接的实现可以根据实际需求添加,通常会通过AJAX获取文件列表,然后在用户点击时触发下载。 总结来说,Spring Boot文件上传和下载涉及到的主要知识点有: 1. 配置`application.properties`以启用multipart上传并设置文件大小限制。 2. 创建Controller处理文件上传和下载的HTTP请求,使用`@RequestParam`和`@PathVariable`注解接收参数。 3. 使用MultipartFile处理上传的文件,将其保存到服务器。 4. 设置响应头以指示浏览器下载文件。 5. 构建前端界面与后端API交互,实现文件的上传和下载功能。 通过这些步骤,你可以构建出一个完整的Spring Boot应用,实现文件的上传和下载功能。在实际开发中,还需要考虑错误处理、安全控制(如防止文件覆盖、非法文件上传等)以及性能优化等问题。