美文网首页
base64图片转化为网络url路径

base64图片转化为网络url路径

作者: bypwan | 来源:发表于2022-05-09 22:35 被阅读0次

背景:
后台同学:同学,下载图片你能不能自己下载,不用调我接口,base64图片你也有
我:想了一下,能成,用a标签,设置href为base64的值,岂不是就完成了,就回答到,可以
后台同学:那你能实现我就不提供了
我:没问题,小case

开始吧:
3下5除2写完了,就是将base64的值赋值给创建的a标签的href
测试一下:完蛋,浏览器不允许
然后一顿百度猛如虎
后来找到了一个可行性方案,跟大家分享一下,可以直接使用
思路:
1,将base64转化为File 文件
2,动态创建a标签实现文件流的下载
上代码:
1)将base64转化为File 文件

dataurl: 'data:image/png;base64,XXXXX...',
filename: '文件名'
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

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;
    }
},

相关文章

网友评论

      本文标题:base64图片转化为网络url路径

      本文链接:https://www.haomeiwen.com/subject/lihkurtx.html