file 转 Blob
使用 FileReader 和 Blob 对象来将 file 转换为 Blob:
function fileToBlob(file: File) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = () => {
const blob = new Blob([reader.result], { type: file.type });
resolve(blob);
};
reader.onerror = () => {
reject(reader.error);
};
});
}
async function uploadHandler(file: File) {
const blob = await fileToBlob(file); // 将文件转换为 Blob 对象
// 在这里进行同步处理 Blob 对象
}
上面代码中,定义了一个名为 fileToBlob 的函数,该函数接受一个 File 对象作为参数,并返回一个 Promise 对象。
-
在
fileToBlob函数内部,创建了一个FileReader对象,并调用readAsArrayBuffer方法将文件读取为 ArrayBuffer 对象。当读取完成后,将 ArrayBuffer 对象传递给Blob构造函数并创建一个新的Blob对象,最后通过resolve方法将它返回。 -
在
uploadHandler函数中,接收了一个文件对象并调用fileToBlob函数将其转换为Blob对象。
请注意,由于
FileReader是异步操作,因此在fileToBlob函数内部使用了 Promise 对象来处理异步操作的结果。
file 转 base64
使用 FileReader 和 readAsDataURL 对象来将 file 转换为 base64:
function fileToBase64(file: File) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = e => {
resolve(e.target.result);
};
reader.onerror = () => {
reject(reader.error);
};
});
}
async function uploadHandler(file: File) {
const base64 = await fileToBase64(file);
// 在这里进行同步处理 base64 对象
}
与 file 转 Blob 相似,创建一个 FileReader 对象,调用 readAsDataURL 将文件读取为 base64 编码的字符串。
file 转换为内容(字符串形式)
FileReader 还有个 readAsText 方法,可以将 Blob 或者 File 对象根据特殊的编码格式转换为内容(字符串形式)
instance of FileReader.readAsText(blob[, encoding]);
- blob 为二进制对象,Blob 类型或 File 类型
- encoding 为编码类型,可选,传入一个字符串类型的编码类型,不传则默认为 "utf-8" 类型
function fileToText(file: File) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsText(file);
reader.onload = () => {
resolve(reader.result);
};
reader.onerror = () => {
reject(reader.error);
};
});
}
async function uploadHandler(file: File) {
const base64 = await fileToText(file);
// 在这里进行同步处理 base64 对象
}