文件
文件处理
Blob
我们也可以使用
const ab = new ArrayBuffer(32);
const iA = new Int8Array(ab);
iA[0] = 97;
const blob = new Blob([iA], { type: "application/octet-binary" });
const fr = new FileReader();
fr.addEventListener("load", function (ev) {
console.log(ev.target.result); //会输出字符:a
});
fr.readAsText(blob);
如果要把
const ab = new ArrayBuffer(32);
const iA = new Int8Array(ab);
iA[0] = 97;
const blob = new Blob([iA], { type: "application/octet-binary" });
const fr = new FileReader();
fr.addEventListener("load", function (ev) {
const abb = ev.target.result;
const iAA = new Int8Array(abb);
console.log(iAA);
});
//把blob文件转化为arraybuffer;
fr.readAsArrayBuffer(blob);
arraybuffer -->> typedarray -->> blob -->> blob
通过
function dataURLtoBlob(dataurl) {
const arr = dataurl.split(","),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n);
//通过atob把base64转化为ascll码,然后再把ascll码转化为字节码
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
//u8arr就是2进制的数据
return new Blob([u8arr], { type: mime });
}
FileReader
通过
// ArrayBuffer -> Blob
const uint8Array = new Uint8Array([1, 2, 3]);
const arrayBuffer = uint8Array.buffer;
const blob = new Blob([arrayBuffer]);
// Blob -> ArrayBuffer
const uint8ArrayNew = null;
const arrayBufferNew = null;
const fileReader = new FileReader();
fileReader.onload = function (event) {
arrayBufferNew = event.target.result;
uint8ArrayNew = new Uint8Array(arrayBufferNew);
// warn if read values are not the same as the original values
// arrayEqual from: http://stackoverflow.com/questions/3115982/how-to-check-javascript-array-equals
function arrayEqual(a, b) {
return !(a < b || b < a);
}
if (arrayBufferNew.byteLength !== arrayBuffer.byteLength)
// should be 3
console.warn("ArrayBuffer byteLength does not match");
if (arrayEqual(uint8ArrayNew, uint8Array) !== true)
// should be [1,2,3]
console.warn("Uint8Array does not match");
};
fileReader.readAsArrayBuffer(blob);
fileReader.result; // also accessible this way once the blob has been read