文件如何上传至java
文件上传至 Java 后端的方法
使用 Spring Boot 的 MultipartFile
Spring Boot 提供了 MultipartFile 接口处理文件上传。在后端控制器中,通过 @RequestParam 或 @ModelAttribute 接收文件。
@PostMapping("/upload")
public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return ResponseEntity.badRequest().body("文件为空");
}
try {
String fileName = file.getOriginalFilename();
Path path = Paths.get("上传目录路径/" + fileName);
Files.write(path, file.getBytes());
return ResponseEntity.ok("文件上传成功");
} catch (IOException e) {
return ResponseEntity.internalServerError().body("上传失败");
}
}
配置上传限制
在 application.properties 中设置文件大小限制:
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
使用 Commons FileUpload(传统 Servlet)
对于非 Spring 项目,可以通过 Apache Commons FileUpload 实现:
ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
String fileName = new File(item.getName()).getName();
item.write(new File("上传目录路径/" + fileName));
}
}
前端表单示例
HTML 表单需设置 enctype="multipart/form-data":
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<button type="submit">上传</button>
</form>
安全性注意事项
- 验证文件类型(通过扩展名或文件头)
- 限制上传目录的访问权限
- 对文件名进行 sanitize 处理,防止路径遍历攻击
大文件分块上传 对于大文件,可采用分块上传策略:

- 前端将文件分块并逐一上传
- 后端接收分块并临时存储
- 全部分块上传完成后合并文件
// 分块合并示例
File mergedFile = new File("最终文件路径");
try (FileOutputStream fos = new FileOutputStream(mergedFile, true)) {
for (File chunk : chunks) {
Files.copy(chunk.toPath(), fos);
}
}






