从PowerAutomate上传文件至SpringBoot HTTPS API时遇Multipart解析异常
PowerAutomate调用SpringBoot文件上传API报错问题解决
问题详情
遇到异常:
"errorMsg": "Failed to parse multipart servlet request; nested exception is org.apache.tomcat.util.http.fileupload.FileUploadException: Header section has more than 10240 bytes (maybe it is not properly terminated)"
该API在Postman和Angular环境下可正常工作,API核心代码如下:
@PostMapping(value = "/v1.0/import", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public ResponseEntity<Void> import( @RequestHeader(AirportConstant.AIRPORT_HEADER) String auth, @RequestParam("file") MultipartFile file, @RequestParam("userId") String userId, @RequestParam(value = "icao") String icao, @RequestParam(value = "entity", required = false) String entity) throws GlobalException { LOGGER.info(":: entering into import ::");
当前PowerAutomate的请求配置:
- 请求头:
Content-Type: multipart/form-data; boundary=--airMaster34 - 查询参数:
userId: check,icao: KORD - 手动构造的multipart请求体:
----airMaster34 Content-Disposition: form-data; name=\"userId\" check ----airMaster34 Content-Disposition: form-data; name=\"icao\" KORD ----airMaster34 Content-Disposition: form-data; name=\"file\"; filename=\"small.ascii\" Content-Type: application/octet-stream <file content in byte> ----airMaster34--
解决方案
- 修正Boundary格式
请求头中的boundary不需要添加--,正确写法应为:
Content-Type: multipart/form-data; boundary=airMaster34
multipart请求体中的分隔线(----airMaster34)格式是正确的,请求头多带的--会导致Tomcat解析混乱,触发头部字节数超限错误。
移除重复参数
目前同时在查询参数和multipart表单中传递了userId、icao,这会造成请求头部冗余,超出默认限制。建议统一将所有参数放到multipart表单中传递,和file参数保持一致。规范换行符
确保multipart请求体的各个部分之间使用**CRLF(\r\n)**换行,避免只使用LF(\n)。PowerAutomate手动构造内容时容易出现换行符不标准的情况,会导致Tomcat无法正确识别头部结束位置,误判为头部过长。临时调整Tomcat参数(可选)
若以上方法无效,可临时修改SpringBoot配置,加大Tomcat的头部大小限制:
在application.properties中添加:
server.tomcat.max-http-header-size=20480 spring.servlet.multipart.max-request-size=10MB spring.servlet.multipart.max-file-size=10MB
注意这只是临时 workaround,优先修复请求构造问题更合理。
内容的提问来源于stack exchange,提问作者Mohammed Imran
相关产品推荐
相关产品推荐

