base64与File转换
互相转换
function base64ToFile(dataurl, filename) { //将base64转换为文件
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
});
}
function fileToBase64(file) {
return new Promise((resolve, reject) => {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
resolve(reader.result);
}
reader.onerror = function (error) {
reject(error);
}
});
}
let str = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEsSURBVEhL7ZQhq4NQAIXfn1REYXVgEMSwMFnzJxhWB0trFoMwWDc4LAbH0GBYsAmbU8/jjuvjuet4cPW298Epx8v5wlW/IJh/wZ+MCu73O+I4RhiGtOFnVFCWJWzbxmKxoM1nrtcrttstns8nbYZ8FKxWK0iSRBuWpmmQJAkMw3idK4qCPhnCJaiqCp7nYblcvs7MLnBdF7Is/4zPImjbFlmWwXGcwXCfyYIoimCaJjPch1tAXlnf95nB93AL9vs9NE1jBt/DLdjtdlAUhRl8D7fg8XjgeDxC13Vm9HcmX3KaprAsixnuM1lAICObzQaqqooREMhXfDgcXv8pIYKe0+kkVkA4n89Yr9fiBF3X4Xa7IQgC1HVN2yGjAnI4z3NcLhfa8DMqmBPBAuAbO6MPaFHs+JIAAAAASUVORK5CYII=';
let file = base64ToFile(str, '123.png');
console.log(file);
fileToBase64(file).then(bstr=>{
console.log(bstr);
console.log(bstr === str); //true
});
File
File对象的构造函数为:
File(bits, name, options)
1) bits (required)
ArrayBuffer,Blob,Array[string] ,或者任何这些对象的组合。都是 UTF-8 编码的文件内容。
2) name [String] (required)
文件名称,或者文件路径。
3)options [Object] (optional)
选项对象,包含文件的可选属性。
var file = new File([blob], 'test.png', {type: 'image/png'});
FileReader
FileReader有以下几种读取文件数据的方法:
1)readAsText(file,encoding)
以纯文本的形式读取文件,将读取到的文件保存到result属性。encoding参数用于指定编码类型,是可选的。
2)readAsDataURL(file)
读取文件并将文件数据以URL形式保存到result属性中。(读取图像文件常用方法)
3)readAsBinaryString(file)
读取文件并将一个字符串保存在result属性中,字符串中的每个字符表示一字节。
4)readAsArrayBuffer(file)
读取文件并将一个包含文件内容的ArrayBuffer保存在result属性中。
作者:姜治宇
原文链接:https://www.jianshu.com/p/9973e0ac7fa2