以前在工作中碰到一个功能,用户可以在没有网的时候选择图片,在有网的时候进到该页面再上传图片,所以得把数据保存到Storage。但是我发现文件类型的数据保存到Storage后变为{},而后台只接收文件对象。解决这个问题的办法有三种:
1.后台改接收参数类型
2.把类型为base64格式的url转为blob上传(这样后台返回的文件也为blob格式,不过没关系,img标签可以解析的)
// base64转blob
dataURLtoBlob = (dataurl) => {
const arr = dataurl.split(','); const mime = arr[0].match(/:(.*?);/)[1];
const bstr = atob(arr[1]); let n = bstr.length; const u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], { type: mime });
}
3.把类型为base64格式的url转为文件
// 将base64转换为文件
ataURLtoFile = (dataurl, filename) => {
const arr = dataurl.split(",");
const mime = arr[0].match(/:(.*?);/)[1];
const bstr = atob(arr[1]);
let n = bstr.length;
const u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, { type: mime });
};
*【注意后面两种在移动端QQ浏览器有兼容问题哦,微信浏览器和手机自带的浏览器就没有问题】