Java中处理REST文件上传需用MultipartFile接收multipart/form-data请求,配合@RequestParam绑定字段名,配置max-file-size和max-request-size限制,并支持多文件及额外参数。

Java 中处理 REST 接口的文件上传,核心是使用 MultipartFile 接收前端传来的二进制文件,并配合 Spring MVC 的标准注解完成解析和业务逻辑。关键在于请求体格式、后端接收方式、大小限制配置和安全校验。
确保前端发送 multipart/form-data 请求
浏览器表单或 Axios 等客户端必须以 multipart/form-data 编码提交,不能用 JSON。例如 HTML 表单:
<form action="/api/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<button type="submit">上传</button>
</form>
Axios 示例(注意不要手动设 Content-Type,让浏览器自动设置边界):
立即学习“Java免费学习笔记(深入)”;
const formData = new FormData();
formData.append('file', fileInput.files[0]);
axios.post('/api/upload', formData);
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
后端用 @RequestParam 接收 MultipartFile
Spring Boot 控制器中直接声明参数类型为 MultipartFile,并用 @RequestParam 绑定字段名(与前端 append 的 key 一致):
@PostMapping("/upload")
public ResponseEntity<String> handleFileUpload(
@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return ResponseEntity.badRequest().body("文件不能为空");
}
try {
String originalName = file.getOriginalFilename();
byte[] bytes = file.getBytes();
// 保存到磁盘或对象存储
return ResponseEntity.ok("上传成功: " + originalName);
} catch (IOException e) {
return ResponseEntity.status(500).body("上传失败");
}
}
配置文件大小与数量限制
默认 Spring Boot 有上传限制(如单文件 1MB),需在 application.properties 中显式调整:
- spring.servlet.multipart.max-file-size=10MB(单个文件最大大小)
- spring.servlet.multipart.max-request-size=50MB(整个请求最大大小,含多个文件+其他字段)
- Spring Boot 2.0+ 使用
spring.servlet.multipart.*;旧版本用spring.http.multipart.*
支持多文件上传与额外参数
可同时接收多个同名文件(数组)、不同字段或普通参数:
@PostMapping("/upload")
public ResponseEntity<String> uploadFiles(
@RequestParam("files") MultipartFile[] files,
@RequestParam("userId") Long userId,
@RequestParam("desc") String description) {
for (MultipartFile f : files) {
if (!f.isEmpty()) {
// 处理每个文件
}
}
return ResponseEntity.ok("共上传 " + files.length + " 个文件");
}
注意:前端需多次 append('files', file) 或用 <input type="file" multiple>。

















