点击下载《SpringBoot实现文件上传和下载实现全过程》
点击下载《SpringBoot实现文件上传和下载实现全过程(源代码)》
在Web应用中,文件上传和下载是常见的需求。Spring Boot框架提供了强大的支持和便利的API,使得开发者可以轻松地实现文件上传和下载功能。本文将详细介绍如何在Spring Boot应用中实现文件上传和下载,包括实现原理和完整的代码示例。
首先,确保你的pom.xml文件中包含了Spring Boot的Web Starter依赖。这个依赖会包含实现文件上传所需的Servlet和相关类。
JDK版本:java17
4.0.0 org.springframework.boot spring-boot-starter-parent 3.2.3 com.example fileOperate 0.0.1-SNAPSHOT fileOperate fileOperate 8 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter-web commons-io commons-io 2.4 org.springframework.boot spring-boot-maven-plugin
在application.yml文件中,你可以配置文件上传的大小限制。例如,下面的配置允许上传最大为1MB的文件:
server: port: 18080 spring: servlet: multipart: max-file-size: 1MB max-request-size: 1MB
创建一个控制器类,用于处理文件上传请求。在这个类中,使用@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 ResponseEntityhandleFileUpload(@RequestParam("file") MultipartFile file) { try { // 获取上传文件的文件名 String fileName = file.getOriginalFilename(); // 将文件保存到磁盘或执行其他操作,这里只是简单地将文件保存到静态资源目录下 file.transferTo(new File("D:/" + fileName)); return new ResponseEntity<>("文件上传成功!", HttpStatus.OK); } catch (Exception e) { return new ResponseEntity<>("文件上传失败:" + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } }
创建一个控制器类,用于处理文件下载请求。在这个类中,我们将使用@GetMapping注解指定处理GET请求的方法,并使用@RequestParam("filename") String fileName参数接收要下载的文件名。然后,我们可以使用文件名来获取要下载的文件,并将其作为响应返回给客户端。
为了让Spring Boot能够找到静态资源(如文件),你需要在src/main/resources目录下创建一个名为static的文件夹,并在其中创建一个名为files的文件夹,用于存放要下载的文件。
import org.springframework.core.io.InputStreamResource; import org.springframework.core.io.Resource; import org.springframework.http.*; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.core.io.ResourceLoader; import org.springframework.beans.factory.annotation.Autowired; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; @RestController @RequestMapping("/api/download") public class FileDownloadController { private static final Logger log = LoggerFactory.getLogger(FileDownloadController.class); @Autowired private ResourceLoader resourceLoader; // 处理文件下载请求的GET方法,通过文件名获取文件并返回给客户端下载 @GetMapping("/{filename:.+}") public ResponseEntityhandleFileDownload(@PathVariable String filename) throws IOException { // 获取要下载的文件的Resource对象,这里假设文件保存在静态资源目录下的files文件夹中 Resource resource = resourceLoader.getResource("classpath:static/files/" + filename); if (resource == null) { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } // 将文件内容包装为响应体,并设置响应头信息,提示浏览器下载文件而不是打开文件 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).get()) .body(inputStreamResource); } }
通过以上步骤,你可以在Spring Boot应用中实现文件上传和下载功能。文件上传通过POST请求实现,将文件作为请求的一部分发送到服务器。文件下载通过GET请求实现,根据文件名从服务器上获取文件内容,并通过浏览器下载。在这个过程中,Spring Boot框架提供了丰富的API和便利的配置选项,使得开发者可以轻松地实现这些功能。
点击下载《SpringBoot实现文件上传和下载实现全过程》
点击下载《SpringBoot实现文件上传和下载实现全过程(源代码)》
上一篇:南京邮电大学数据库第三次课后作业