最近在使用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); });
.