Spring Boot中实现文件上传和下载功能示例

2024-06-18 12:19:47 浏览数 (2)

在Spring Boot中实现文件上传和下载功能是一个常见的需求,可以通过几个简单的步骤来完成。下面来介绍一下如何实现文件上传和下载。

1. 添加依赖

首先,确保你的`pom.xml`文件中包含了Spring Boot的Web支持以及用于文件上传的库。通常,Spring Boot starter web已经足够,但你可能还需要添加一个额外的配置来支持文件上传。

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<!-- 如果需要处理大文件上传,可以考虑添加以下依赖来提高性能 -->

<dependency>

<groupId>commons-fileupload</groupId>

<artifactId>commons-fileupload</artifactId>

<version>1.4</version>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-jpa</artifactId> <!-- 这个是可选的,如果你需要数据库操作的话 -->

</dependency>

</dependencies>

注意:对于大文件上传,Spring Boot 2.x以上版本推荐使用`spring-boot-starter-webflux`并配合多部分解析器处理大文件。

2. 配置文件上传

在`application.properties`或`application.yml`中,你可以配置文件上传的大小限制:

properties

# application.properties

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

spring.servlet.multipart.max-request-size=100MB

3. 文件上传接口

创建一个Controller类,定义一个方法来处理文件上传请求。这里使用`MultipartFile`接收上传的文件。

import org.springframework.beans.factory.annotation.Value;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.multipart.MultipartFile;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;

@RestController

public class FileUploadController {

@Value("${upload.path}")

private String uploadPath;

@PostMapping("/upload")

public String handleFileUpload(@RequestParam("file") MultipartFile file) {

try {

// 检查文件是否为空

if (file.isEmpty()) {

return "Please select a file to upload";

}

// 获取文件名

String fileName = file.getOriginalFilename();

// 构建文件存储路径

Path filePath = Paths.get(uploadPath, fileName);

// 保存文件到服务器

Files.copy(file.getInputStream(), filePath);

return "File uploaded successfully: " fileName;

} catch (Exception e) {

e.printStackTrace();

return "Error occurred while uploading file: " e.getMessage();

}

}

}

确保在`application.properties`中设置了文件上传的目录路径,如:

properties

upload.path=/path/to/upload/directory

4. 文件下载接口

同样地,定义一个方法来处理文件下载请求。

@GetMapping("/download/{fileName:. }")

public ResponseEntity<Resource> downloadFile(@PathVariable String fileName, HttpServletResponse response) throws IOException {

Path filePath = Paths.get(uploadPath, fileName);

if (!Files.exists(filePath)) {

throw new FileNotFoundException("File not found " fileName);

}

Resource resource = new UrlResource(filePath.toUri());

String contentType = null;

try {

contentType = Files.probeContentType(filePath);

} catch (IOException e) {

e.printStackTrace();

}

if (contentType == null) {

contentType = "application/octet-stream";

}

return ResponseEntity.ok()

.contentType(MediaType.parseMediaType(contentType))

.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename="" resource.getFilename() """)

.body(resource);

}

这段代码会根据文件名从指定的目录下载文件,并设置正确的响应头以提示浏览器进行文件下载。

注意事项

- 确保应用具有对上传和下载目录的读写权限。

- 考虑安全性问题,避免直接暴露文件路径,防止恶意访问。

- 对于大型文件上传和下载,考虑使用异步处理或者流式处理来优化性能和资源使用。

以上就是使用Spring Boot实现文件上传和下载的基本示例。

0 人点赞