uni-app uni.uploadFile上传文件报错。Failed to parse multipart servlet request; nested exception is java.io.IOException

作者: tww844475003 分类: 前端开发,小程序 发布时间: 2024-10-04 22:14

msg: “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”

报错说明:

小程序没有问题,发布h5微信公众号,上传文件报错。

Ai机器人回答

这个错误通常发生在使用uniapp进行文件上传时,尤其是当你尝试通过HTTP请求发送多部分表单数据(multipart/form-data)时。错误的原因是HTTP客户端没有找到多部分表单数据的边界标识,即没有在请求头中指定Content-Typemultipart/form-data或缺少了boundary参数。

解决方法:

  1. 确保你的请求头中包含正确的Content-Type,并且它应该是这样的格式:multipart/form-data; boundary=<some_boundary_string>。其中<some_boundary_string>是你自定义的用于分隔表单数据的字符串。
  2. 如果你使用的是uniapp提供的uni.request方法,确保你在header对象中设置了正确的Content-Type

示例代码:

const boundary = ‘————————–1230424117911’;
const options = {
url: ‘https://your-api-endpoint.com’, // 替换为你的API端点
method: ‘POST’,
header: {
‘content-type’: multipart/form-data; boundary=${boundary},
// 其他需要的头部信息
},
filePath: ‘/path/to/your/file’, // 上传文件的路径
name: ‘file’, // 对应服务器端接收文件的字段名
// 其他可能需要的参数
};

uni.uploadFile(options)
.then(response => {
console.log(‘upload success:’, response);
})
.catch(error => {
console.error(‘upload error:’, error);
});

network自查了一下

请求的header里设置了两次 “Content-Type” :
1. Content-Type multipart/form-data; boundary=1634796333288 
2. content-type multipart/form-data
后一次的content-type没有带boundary导致请求失败了

原因:

因为在代码里自己设置了headers. content-type multipart/form-data

把前面的boundary参数替换了,报错了。

出现这个bug的原因是boundary字段缺失,在大部分机型上,微信定义的content-type会在后面,所以不会影响,测试也测不出来,而在小部分机型,自定义的content-type会在后面,导致boundary字段缺失;

解决建议: 不自己添加content-type字段

https://developers.weixin.qq.com/community/develop/doc/0004e8aef5cb4834b1ec992835b400?highline=
前端开发那点事
微信公众号搜索“前端开发那点事”

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注