file 转换为 Blob、base64

907 阅读2分钟

file 转 Blob

使用 FileReaderBlob 对象来将 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

使用 FileReaderreadAsDataURL 对象来将 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 对象
}