base64图片转化为网络url路径

思路

1,将base64转化为File 文件

2,动态创建a标签实现文件流的下载

代码

1)将base64转化为File 文件

let dataurl='data:image/png;base64,XXXXX...',
let filename='文件名'
function base64ImgtoFile (dataurl, filename = 'file') {
      //将base64格式分割:['data:image/png;base64','XXXX']
      const arr = dataurl.split(',')
      // .*? 表示匹配任意字符到下一个符合条件的字符 刚好匹配到: 
     // image/png
      const mime = arr[0].match(/:(.*?);/)[1]  //image/png
      //[image,png] 获取图片类型后缀
      const suffix = mime.split('/')[1] //png
      const bstr = atob(arr[1])   //atob() 方法用于解码使用 base-64 编码的字符串
      let n = bstr.length
      const u8arr = new Uint8Array(n)
      while (n--) {
        u8arr[n] = bstr.charCodeAt(n)
      }
      return new File([u8arr], `${filename}.${suffix}`, {
        type: mime
      })
    }

2)将1中得到的File转化为图片的URL

    const blob = this.base64ImgtoFile(dataurl)
    const blobUrl = window.URL.createObjectURL(blob);
    // 这里的文件名根据实际情况从响应头或者url里获取
    const filename = blob.name;
    const a = document.createElement('a');
    a.href = blobUrl;
    a.download = filename;;
    a.click();
    window.URL.revokeObjectURL(blobUrl);

通过上面2步即可完成前端base64图片的下载

进一步思考:如何将文件转换为base64那?

例如:我们利用element el-upload很容易获取到上传的文件

利用new FileReader对象的readAsDataURL方法可以将读取到的文件编码成DataURL

function changeFile(file, fileList) {
    var This = this;
    var reader = new FileReader();
    reader.readAsDataURL(file.raw);
    reader.onload = function(e){
        this.result; //base64编码
        This.imageBaseUrl = this.result;
        This.imageUrl = this.result;
    }
}

转载至https://www.jianshu.com/p/5b1daf17afc3

posted @ 2022-12-08 15:55  槑孒  阅读(939)  评论(0编辑  收藏  举报