通过 input:file 获取的 file 文件
let file = event.target.files[0];
const reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = ({ target }) => {
const arrayBuffer = target.result;
console.log(arrayBuffer);
console.log(new Int8Array(arrayBuffer)); // 具体看需要转哪个类型
};
let file = event.target.files[0];
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = ({ target }) => {
const base64 = target.result;
};
let file = event.target.files[0];
const reader = new FileReader();
reader.readAsText(file);
reader.onload = ({ target }) => {
const text = target.result;
};
File 和 Blob 可以通过构造函数互转
/*
File
bits:ArrayBuffer、ArrayBufferView、Blob、String、Array 可传入类型
name:文件名称
options(可选):配置
type:文件类型
lastModified:最后修改时间,默认为当前时间
*/
new File(bits, name[, options]);
/*
Blob
arr:ArrayBuffer、ArrayBufferView、Blob、String、Array 可传入类型
options:配置
type:文件类型
endings:用于指定包含行结束符\n的字符串如何被写入
native,适合宿主操作系统文件系统的换行符
transparent,保持不变,默认是这个
*/
new Blob(arr, options);
function base64ToFile(base64, fileName) {
// 文件类型
const type = base64.split(";")[0].split(":")[1];
// 对 base64 进行解码
const content = atob(base64.split(",")[1]);
let len = content.length;
let uint8 = new Uint8Array(len);
let i = len;
while (i--) {
// 把解码的码点存储二进制数据
uint8[i] = content.charCodeAt(i);
}
return new File([uint8], fileName, { type });
}
let encoder = new TextEncoder()
const unit8 = encoder.encode("哈哈") // 返回一个包含 UTF-8 编码的文本的 Uint8Array
// 将二进制以什么编码格式进行解码,默认 utf-8
let decoder = new TextDecoder('utf-8')
decoder.decode(unit8) // 哈哈
let url = URL.createObjectURL(Blob/File) // 此 url 可以直接在浏览器打开
// 浏览器在 document 卸载的时候,会自动释放 url,但是为了获得最佳性能和内存使用状况,建议主动去卸载
// 卸载完成后,如果在打开 url,将不存在
URL.revokeObjectURL(url)
// html-code
const canvas = document.querySelector("canvas");
const ctx = canvas.getContext("2d");
const img = document.createElement("img");
img.src = "图片路径/base64";
// 绘制图片
img.onload = function () {
ctx.drawImage(img, 0, 0);
};
/*
type:图片格式
quality:图片质量
*/
canvas.toBlob(
(e) => {
console.log(e);
},
type,
quality
);
/*
type:图片格式
encoderOptions:图片质量,0/1,默认 0.92
*/
canvas.toDataURL(type, encoderOptions)