Spring中MultipartFormData请求如何同时传递Header参数与文件?
问题解决步骤
1. 修正代码中的笔误
你的代码存在两处明显错误,可能引发异常干扰参数解析:
- 日志语句多了一个右括号:
// 错误写法 log.info(token + cvFile.getOriginalFilename())); // 修正后 log.info(token + cvFile.getOriginalFilename()); - 调用
curriculumService.addCurriculum时传入了未定义的变量pdfFile,需改为cvFile:return curriculumService.addCurriculum(token, cvFile);
2. 保留MediaType.MULTIPART_FORM_DATA_VALUE,排查Header缺失原因
MULTIPART_FORM_DATA_VALUE是文件上传的标准MediaType,问题出在请求头的token未正确传递,而非MediaType本身:
- 确认请求客户端(前端/Postman等)确实在请求头区域添加了
token字段,不要将token放在form-data参数里。 - 检查项目中的拦截器、过滤器(比如Spring Security),确认是否过滤或修改了请求头中的
token字段,确保该Header能被接口方法获取。 - 可临时将
@RequestHeader的required设为false,测试是否能拿到值,逐步排查:public ResponseEntity<?> uploadCV(@RequestHeader(value = "token", required = false) String token, @RequestParam("file") MultipartFile cvFile) throws Exception { log.info("token: {}, filename: {}", token, cvFile.getOriginalFilename()); return curriculumService.addCurriculum(token, cvFile); }
3. 禁止使用MediaType.MULTIPART_MIXED_VALUE处理文件上传
MULTIPART_MIXED适用于混合多种媒体类型的请求(如包含文本和附件的邮件内容),并非文件上传的标准类型。客户端使用该类型时通常不会自动生成正确的boundary分隔符,从而触发no multipart boundary was found错误,文件上传场景请坚持使用MULTIPART_FORM_DATA_VALUE。
内容的提问来源于stack exchange,提问作者Federico Gradizzi
相关产品推荐
相关产品推荐

