SpringBoot上传文件异常-Required request part 'file' is not present

博客分享了一个问题的解决办法。首先要添加 commons-io 和 commons-fileupload 的依赖,版本分别为 1.3.2 和 1.2.1。然后在控制器中直接映射文件,使用 @RequestParam(“excelFile”) MultipartFile excelFile 即可解决问题。

今天碰到这个问题,找了一遍,解决办法如下步骤:
1.添加依赖:
< dependency>
< groupId>commons-io< /groupId>
< artifactId>commons-io< /artifactId>
< version>1.3.2< /version>
< /dependency>
< dependency>
< groupId>commons-fileupload< /groupId>
< artifactId>commons-fileupload< /artifactId>
< version>1.2.1< /version>
< /dependency>
2.控制器直接映射文件:如
@RequestParam(“excelFile”) MultipartFile excelFile
解决。

注:技术交流QQ群-595892258

### Spring Boot 文件上传 `required request part 'customFile' is not present` 错误解决方案 当在使用 Spring Boot 进行文件上传操作时,如果遇到错误提示 `required request part 'customFile' is not present`,这通常意味着前端发送的请求中缺少指定名称的文件部分。以下是可能的原因以及对应的解决方法: #### 原因分析 1. **前端未正确设置 multipart 请求** 如果前端没有按照正确的格式构建 multipart 表单数据,则可能导致后端无法解析到名为 `'customFile'` 的文件字段[^2]。 2. **参数名不匹配** 后端代码中的 `@RequestParam("customFile")` 参数名必须与前端传递的实际字段名一致。如果不一致,也会引发此问题[^3]。 3. **Content-Type 配置不当** HTTP 请求头中需要显式声明 `Content-Type: multipart/form-data`,否则服务器不会识别该请求为文件上传请求[^4]。 --- #### 解决方案 ##### 方法一:检查并修正前端代码 确保前端通过 JavaScript 或 HTML 正确设置了表单数据结构。例如,在 JavaScript 中可以这样实现: ```javascript const formData = new FormData(); formData.append('customFile', fileInput.files[0]); // 确保 key 名称为 customFile fetch('/upload-endpoint', { method: 'POST', body: formData, }); ``` 对于 HTML 表单提交的情况,需确认 `<form>` 标签具有属性 `enctype="multipart/form-data"` 和 `method="post"`: ```html <form action="/upload-endpoint" method="post" enctype="multipart/form-data"> <input type="file" name="customFile"> <!-- 确认 input 的 name 属性 --> <button type="submit">Upload</button> </form> ``` ##### 方法二:验证后端控制器定义 后端接收文件的接口应类似于以下形式: ```java @PostMapping("/upload") public ResponseEntity<String> uploadFile(@RequestParam("customFile") MultipartFile file) { if (file.isEmpty()) { return ResponseEntity.badRequest().body("File cannot be empty"); } try { byte[] bytes = file.getBytes(); // 处理文件逻辑... return ResponseEntity.ok("File uploaded successfully!"); } catch (Exception e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage()); } } ``` 注意这里的 `@RequestParam("customFile")` 必须严格对应前端传入的数据键名。 ##### 方法三:调整全局配置支持大文件上传 有时即使上述都无误,仍会因为默认大小限制而失败。可以在 application.properties 或 application.yml 中增加如下配置来放宽限制: ```properties spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB ``` 或者 YAML 版本: ```yaml spring: servlet: multipart: max-file-size: 10MB max-request-size: 10MB ``` --- #### 示例代码展示 下面是一个完整的前后端交互案例供参考: ###### 前端示例(JavaScript) ```javascript document.getElementById('uploadButton').addEventListener('click', () => { const fileInput = document.getElementById('file'); const formData = new FormData(); formData.append('customFile', fileInput.files[0]); fetch('/api/upload', { method: 'POST', body: formData, }).then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error)); }); ``` ###### 后端示例(Java/Spring Boot) ```java @RestController @RequestMapping("/api") public class FileController { @PostMapping("/upload") public ResponseEntity<String> handleFileUpload(@RequestParam("customFile") MultipartFile file) { if (file.isEmpty()) { return ResponseEntity.badRequest().build(); } try { // Save the file or process it here. System.out.println("Uploaded file details:"); System.out.println("- Name: " + file.getOriginalFilename()); System.out.println("- Size: " + file.getSize() + " bytes"); return ResponseEntity.ok("File uploaded successfully."); } catch (Exception ex) { return ResponseEntity.internalServerError() .body("An internal server error occurred while uploading the file."); } } } ``` --- #### 总结 要彻底解决问题,建议逐一排查以下几个方面: - 确认前端是否按要求构造了 multipart 数据; - 检查后端接口参数名是否完全匹配; - 调整必要的应用级配置以适应实际需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Retank

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值