【问题标题】:JavaScript reader.readAsDataURL() returns "undefined"JavaScript reader.readAsDataURL() 返回“未定义”
【发布时间】:2021-10-18 09:21:46
【问题描述】:

在过去的几个小时里,我一直在尝试找到一种使用 JavaScript 对二进制数据进行 Base64 编码的方法,结果发现 btoa() 仅适用于字符串,所以我想出了以下代码,其中 blob 是我需要编码的文件:

function base64Encode(blob) {
    var reader = new FileReader();
    reader.readAsDataURL(blob)
    reader.onloadend = function() {
        console.log(reader.result);
    };
};

问题是,base64Encode(blob) 总是返回 undefined,有人知道解决办法吗?

【问题讨论】:

  • 试着把你的函数放在onload,而不是onloadend。另外,你的 blob 有没有可能是格式错误的?
  • 你的函数base64Encode没有返回任何东西,所以隐式返回undefined
  • 1.任何没有return 语句的函数“返回未定义”。 2. readAsDataUrl 是异步的。 read more

标签: javascript function base64 blob filereader


【解决方案1】:

你没有从你的函数中返回任何东西,你可以使用 Promise 和 async/await。作为示例,请参见下面的代码,它可能会对您有所帮助。

const convertBlobToBase64 = async (blob) => {
  return await blobToBase64(blob);
}

const blobToBase64 = blob => new Promise((resolve, reject) => {
  const reader = new FileReader();
  reader.readAsDataURL(blob);
  reader.onload = () => resolve(reader.result);
  reader.onerror = error => reject(error);
});

来电者:

console.log(await convertBlobToBase64(someFileData));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多