必须完成前端页面构建、后端控制器编写、文件存储路径配置及安全性处理四部分,否则上传会失败或返回500错误;需引入spring-boot-starter-web依赖,配置max-file-size、max-request-size和upload-dir,创建含enctype="multipart/form-data"的HTML表单,编写带UUID重命名与transferTo保存逻辑的Controller,并通过WebMvcConfigurer映射/file/**到upload-dir实现HTTP可访问。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Qoder环境中开发Spring Boot文件上传功能,需完成前端页面构建、后端控制器编写、文件存储路径配置及安全性处理四部分,缺一不可,否则上传会直接失败或返回500错误。
准备基础依赖与配置
确认pom.xml中已引入spring-boot-starter-web(无需额外添加fileupload依赖,Spring Boot 2.0+默认启用StandardServletMultipartResolver)。
在application.yml中添加以下配置:
spring:
servlet:
multipart:
max-file-size: 20MB
max-request-size: 50MB
file:
upload-dir: ./uploads/
【upload-dir必须是相对路径或绝对路径,不能以~或$HOME开头,否则transferTo会抛出NoSuchFileException】
创建静态上传页面
在src/main/resources/static目录下新建upload.html:
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>文件上传</title></head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" required>
<button type="submit">上传单文件</button>
</form>
</body></html>
注意:enctype="multipart/form-data"不可省略,否则后端收不到MultipartFile对象。
编写上传控制器
新建UploadController.java,放在controller包下:
@RestController
public class UploadController {
@Value("${file.upload-dir}")
private String uploadDir;
@PostMapping("/upload")
public ResponseEntity<Map<String, String>> handleUpload(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return ResponseEntity.badRequest().body(Map.of("msg", "文件为空"));
}
try {
String originalName = file.getOriginalFilename();
String ext = originalName.substring(originalName.lastIndexOf("."));
String newFileName = UUID.randomUUID().toString() + ext;
Path uploadPath = Paths.get(uploadDir);
if (!Files.exists(uploadPath)) {
Files.createDirectories(uploadPath);
}
Path targetPath = uploadPath.resolve(newFileName);
file.transferTo(targetPath);
Map<String, String> result = new HashMap<>();
result.put("url", "/files/" + newFileName);
result.put("size", String.valueOf(file.getSize()));
return ResponseEntity.ok(result);
} catch (IOException e) {
return ResponseEntity.status(500).body(Map.of("msg", "保存失败:" + e.getMessage()));
}
}
}
配置虚拟路径映射
让上传后的文件可通过HTTP直接访问,需添加资源处理器:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Value("${file.upload-dir}")
private String uploadDir;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/files/**")
.addResourceLocations("file:" + uploadDir);
}
}
这一步不做,浏览器访问 /files/xxx.jpg 会返回404,即使文件物理存在。
启动并验证上传流程
① 启动Spring Boot应用;
② 浏览器访问 http://localhost:8080/upload.html;
③ 选择一个小于20MB的图片文件,点击上传;
④ 查看响应JSON中的url字段,复制到新标签页打开;
⑤ 确认图片正常显示且路径可公开访问。


















