可以尝试如下方案,先转blob,再转file /** * 将base64转换为blob */ public dataURLtoBlob(dataurl) { var arr = dataurl.split(","), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new Blob([u8arr], { type: mime, }); } /** * 将blob转换为file */ public blobToFile(blob, fileName) { blob.lastModifiedDate = new Date(); blob.name = fileName; return blob; }
通过wx.getLocalImgData获取的base64如何转换为File对象小程序嵌套的h5页面,使用JsSdk接口上传图片: 在ios下,通过wx.getLocalImgData获取图片的base64数据,想把base64转成File对象上传到本地的ftp服务器上,发现上传后的文件大小为0kb. 不知道是不是转换后的file对象有问题? wx.getLocalImgData({ localId: res.localIds[i], // 图片的localID success: function (res) { let localData = res.localData // localData是图片的base64数据,可以用img标签显示 //iOS 系统里面得到的数据,类型为 image/jgp,因此需要替换一下 localData = localData.replace('jgp', 'jpeg') let newFile=_this.dataURLtoFile(localData,i+'.jpg') newFile.src = localData _this.transformSingleFile(_this.doctor.id,newFile,'2') } }) dataURLtoFile(dataurl,filename){ var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while(n--){ u8arr[n] = bstr.charCodeAt(n); } return new File([u8arr], filename, {type:mime}); }
2021-03-24