实现步骤
1. 创建上传接口
首先,你需要在控制器中创建一个上传文件的接口。
@RestController
@RequestMapping("/api")
public class FileUploadController {
// 上传文件的方法
@PostMapping("/upload")
public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
// 指定上传文件保存的路径
String uploadDirectory = System.getProperty("user.dir") + "/src/main/resources/static/uploads/";
// 确保文件夹存在
File directory = new File(uploadDirectory);
if (!directory.exists()) {
directory.mkdirs();
}
try {
// 获取上传文件的原始文件名
String fileName = file.getOriginalFilename();
// 保存文件到指定路径
Path filePath = Paths.get(uploadDirectory + fileName);
Files.write(filePath, file.getBytes());
// 返回访问图片的 URL
String fileAccessUrl = "/uploads/" + fileName;
return ResponseEntity.ok(fileAccessUrl);
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("文件上传失败");
}
}
}
2. 配置静态资源访问路径
在 Spring Boot 中默认情况下,src/main/resources/static 目录下的文件会被作为静态资源公开。因此,上传的文件存储在这个目录下时,可以通过 HTTP 直接访问这些文件。
你可以在 application.properties 中配置静态资源路径,如果想要定制更多的静态资源路径,可以通过以下配置:
# 配置静态资源路径,默认配置下static目录下的文件可以直接通过"/uploads/"访问
spring.resources.static-locations=classpath:/static/
这个配置会让 Spring Boot 自动映射 src/main/resources/static 目录中的文件。
3. 保存文件到 static/uploads 目录
在上面的控制器中,上传的文件会保存到 src/main/resources/static/uploads 目录,这样文件就可以通过 http://localhost:8080/uploads/{filename} 访问。
4. 完整代码示例
- Controller (FileUploadController.java)
@RestController
@RequestMapping("/api")
public class FileUploadController {
@PostMapping("/upload")
public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
String uploadDirectory = System.getProperty("user.dir") + "/src/main/resources/static/uploads/";
File directory = new File(uploadDirectory);
if (!directory.exists()) {
directory.mkdirs();
}
try {
String fileName = file.getOriginalFilename();
Path filePath = Paths.get(uploadDirectory + fileName);
Files.write(filePath, file.getBytes());
String fileAccessUrl = "/uploads/" + fileName;
return ResponseEntity.ok(fileAccessUrl);
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("文件上传失败");
}
}
}
application.properties
# 静态资源配置,默认静态资源目录为 static
spring.resources.static-locations=classpath:/static/
5. 上传与访问文件
- 上传接口:通过
POST请求向/api/upload发送文件(表单类型multipart/form-data)。 - 文件上传成功后,将返回一个访问 URL,例如:
http://localhost:8080/uploads/your-file-name.png。