收藏
回答

通过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}); 

}


回答关注问题邀请回答
收藏

6 个回答

  • 吸溜
    吸溜
    2023-09-12

    localData = localData.replace('jgp''jpeg')

    这个是jpg还是jgp

    2023-09-12
    有用
    回复
  • ice cream🐳
    ice cream🐳
    2021-03-24

    可以尝试如下方案,先转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;

      }


    2021-03-24
    有用
    回复
  • kai
    kai
    2020-05-21

    我也是想要file对象..但是控制台报的File is not undefined,,,,估计连File都给阉割掉了...?

    2020-05-21
    有用
    回复
  • 智者
    智者
    2019-07-12

    你好。请问你的sdk还可以用getLocalImgData吗

    2019-07-12
    有用
    回复
  • 王彩霞
    王彩霞
    2018-11-21

    2018-11-21
    有用
    回复
  • fancy
    fancy
    2018-11-21

    你好,请问解决了吗

    2018-11-21
    有用
    回复
登录 后发表内容