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