3

我必须将数据作为字符数组读取,甚至更好地作为来自 blob url 的 base64 字符串读取,以供以后处理。

例如blobUrl,我必须阅读的是 blob:https://localhost:44399/a4775972-6cc8-41a3-af64-1180d9941ab0

实际上,当点击链接时,文件会在我的浏览器中预览。

尝试读取文件时

var blobUrl = document.getElementById("test").value;

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

我得到错误

Uncaught TypeError: Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'.

我在这里做错了什么?

readAsDataURL实际上不接受 url 作为输入?

我该如何解决?

4

1 回答 1

3

正如规范所说,只readAsDataURL接受Blob(它是文件继承者)作为参数。

因此,您需要使用原始 blob 文件引用(如果有)或将 URL 转换为文件实例。

要将图像 URL 转换为文件本身,您可以执行以下操作。

async function convertToFile(url){
  let response = await fetch(url);
  let blob = await response.blob();

  return new File([blob], 'put_the_name.jpg', {
    type: 'image/jpeg'
  });
}

// usage
async function main() {
  const url = document.getElementById("test").value; // get file URL somehow
  const file = await convertToFile(url); // usage of function above

  const reader = new FileReader();
  reader.readAsDataURL(file);
  ...
}

或者,如果您的标记中有用于上传文件的输入(这是一种流行的用例),您可以直接获取文件引用。

var file = document.querySelector('input[type=file]').files[0];
var reader = new FileReader();

if (file) {
  reader.readAsDataURL(file);
}
于 2019-11-25T10:32:33.703 回答