1. 创建Spring Boot应用
首先,创建一个Spring Boot项目并添加必要的依赖。可以使用Spring Initializr生成项目。
2. 添加依赖
在pom.xml
中添加Spring Boot Starter Web依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
3. 配置文件上传
在application.properties
中配置文件上传的限制(可选):
spring.servlet.multipart.max-file-size=5MB
spring.servlet.multipart.max-request-size=5MB
4. 创建控制器类
创建一个控制器类FileController
来处理文件的上传和下载:
package com.example.demo.controller;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.nio.file.*;
@RestController
@RequestMapping("/files")
public class FileController {
private static final String UPLOAD_DIR = "uploads/";
// 上传文件
@PostMapping("/upload")
public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
try {
Path path = Paths.get(UPLOAD_DIR + file.getOriginalFilename());
Files.createDirectories(path.getParent()); // 确保目录存在
Files.copy(file.getInputStream(), path, StandardCopyOption.REPLACE_EXISTING);
return ResponseEntity.ok("File uploaded successfully: " + file.getOriginalFilename());
} catch (IOException e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failed to upload file");
}
}
// 下载文件
@GetMapping("/download/{filename}")
public ResponseEntity<InputStreamResource> downloadFile(@PathVariable String filename) {
try {
Path path = Paths.get(UPLOAD_DIR + filename);
File file = path.toFile();
InputStream inputStream = new FileInputStream(file);
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + filename);
headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);
return new ResponseEntity<>(new InputStreamResource(inputStream), headers, HttpStatus.OK);
} catch (IOException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
}
}
}
5. 启动应用
启动你的Spring Boot应用。确保在项目根目录下创建一个uploads
目录,或者根据需要调整UPLOAD_DIR
的路径。
6. 测试
- 上传文件:使用Postman或其他工具,发送POST请求到
http://localhost:8080/files/upload
,并附上一个文件。 - 下载文件:发送GET请求到
http://localhost:8080/files/download/filename
(将filename
替换为上传的文件名)。