最近在使用Taro开发上传头像功能时,发现使用 Taro.request 上传 formData 数据失败,进行原因发现,Taro.request 底层是通过封装 fetch实现的。
fetch 作为浏览器自身提供的api,当传入的参数为 formDate 格式时,不可手动设置content-type
方案一:删除 header 中的 content-type
if (isFormData) {
/**
* fetch bug:当输入为formData格式时,不可手动设置content-type
*/
delete header["content-type"];
}
方案二:通过创建 xhr 对象实现
export const upLoadImage = (formData): Promise<any> =>
new Promise(function(resolve, reject) {
const request = new XMLHttpRequest();
request.onreadystatechange = () => {
if (request.readyState === 4 && request.status === 200) {
const result = JSON.parse(request.responseText);
resolve(result);
}
};
request.open("POST", API_MINE_SAVE_IMAGE);
request.setRequestHeader(
"Authorization",
`Bearer ${Taro.getStorageSync("token")}`
);
request.onerror = err => {
reject(err);
}; //发送请求
request.send(formData);
});
.