Spring Boot中的文件上传和下载实现

发布时间 2023-12-04 17:23:54作者: Xproer-松鼠

文件上传
文件上传是Web应用程序中常见的功能之一,Spring Boot提供了MultipartFile接口来处理文件上传。以下是实现文件上传的步骤:

添加依赖
在pom.xml文件中添加以下依赖:

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

创建上传页面
在HTML页面中添加上传表单,例如:

<form method="POST" action="/upload" enctype="multipart/form-data">
<input type="file" name="file"/>
<button type="submit">上传</button>
</form>

在表单中使用POST请求将文件上传到/upload路径。

实现上传接口
在Spring Boot应用程序中实现上传接口,例如:

@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) throws IOException {
String fileName = file.getOriginalFilename();
byte[] bytes = file.getBytes();
Path path = Paths.get("uploads/" + fileName);
Files.write(path, bytes);
return "上传成功!";
}

在上面的代码中,我们使用@RequestParam注解来获取上传的文件,使用MultipartFile接口来处理文件上传,使用Files.write()方法将文件写入到指定路径。

配置上传文件大小限制
默认情况下,Spring Boot限制上传文件的大小为1MB。如果需要上传更大的文件,可以在application.properties文件中添加以下配置:

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

在上面的配置中,我们将上传文件的大小限制为10MB。

文件下载
文件下载是Web应用程序中另一个常见的功能,Spring Boot提供了ResourceLoader接口和Resource类来处理文件下载。以下是实现文件下载的步骤:

实现下载接口
在Spring Boot应用程序中实现下载接口,例如:

@GetMapping("/download")
public ResponseEntity<Resource> download(@RequestParam("file") String fileName) throws IOException {
Resource resource = new FileSystemResource("uploads/" + fileName);
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"");
return ResponseEntity.ok().headers(headers).body(resource);
}

在上面的代码中,我们使用@RequestParam注解来获取要下载的文件名,使用ResourceLoader接口和Resource类来加载要下载的文件,使用ResponseEntity类来返回文件内容,使用HttpHeaders类来设置响应头。

配置下载文件大小限制
默认情况下,Spring Boot不限制下载文件的大小。如果需要限制下载文件的大小,可以在application.properties文件中添加以下配置:

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

在上面的配置中,我们将下载文件的大小限制为10MB。

以上是在Spring Boot中实现文件上传和下载的步骤。除了上述方法,还可以使用第三方库来实现文件上传和下载功能,例如Apache Commons FileUpload和Apache Commons IO。

使用Apache Commons FileUpload实现文件上传的步骤如下:

添加依赖
在pom.xml文件中添加以下依赖:

<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>

实现上传接口
在Spring Boot应用程序中实现上传接口,例如:

@PostMapping("/upload")
public String upload(HttpServletRequest request) throws Exception {
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext()) {
FileItemStream item = iter.next();
String fileName = item.getName();
InputStream inputStream = item.openStream();
// 处理上传的文件
}
return "上传成功!";
}

在上面的代码中,我们使用ServletFileUpload类来处理文件上传,使用FileItemIterator类和FileItemStream类来遍历上传的文件,使用InputStream类来读取上传的文件内容。

使用Apache Commons IO实现文件下载的步骤如下:

添加依赖
在pom.xml文件中添加以下依赖:

<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>

实现下载接口
在Spring Boot应用程序中实现下载接口,例如:

@GetMapping("/download")
public ResponseEntity<byte[]> download(@RequestParam("file") String fileName) throws IOException {
File file = new File("uploads/" + fileName);
byte[] bytes = FileUtils.readFileToByteArray(file);
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getName() + "\"");
return ResponseEntity.ok().headers(headers).body(bytes);
}

在上面的代码中,我们使用FileUtils类来读取要下载的文件内容,使用ResponseEntity类来返回文件内容,使用HttpHeaders类来设置响应头。

以上是在Spring Boot中实现文件上传和下载的方法,选择适合自己的方法进行实现即可。

 

参考文章:http://blog.ncmem.com/wordpress/2023/12/04/spring-boot%e4%b8%ad%e7%9a%84%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e5%92%8c%e4%b8%8b%e8%bd%bd%e5%ae%9e%e7%8e%b0/

欢迎入群一起讨论