小程序使用wx.chooseImage上传本地相册图片到后端,后端用的MultipartFile接收,报错:the request was rejected because no multipart boundary was found
org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
同样的情况。我们的问题已经解决了。是因为 微信小程序uploadFile方法,HTTP请求中的Content-Type缺少了boundary。
正确的应该是:multipart/form-data; boundary=xxxxx
实际接收到的是:multipart/form-data;
服务端无法根据boundary来区分form-data的fields,因此无法处理请求导致上传发生错误。
我们解决方案:
在网关层编写了一个中间件应用在上传服务器前,判断请求的Content-Type是中不存在boundary时。从Request Body中获取第一行(就是boundary),去掉前缀"--",放到header中。
举例:
Body内容如下:
--1634813444
Content-Disposition: form-data; name="Filedata"; filename="aaa.pdf"; filename*="UTF-8''aa.pdf"
<aa.pdf>
--1634813444
Content-Disposition: form-data; name="resotype"
1
--1634813444--
获取"--1634813444",并去掉前缀"--"。得到 Content-Type: multipart/form-data; boundary=1634813444,服务端就可以正常处理请求。