如何选择FileReader的阅读方法?

Heu*_*yie 0 javascript image image-processing

在制作一个简单的图片上传器时,我正在学习FileReader API。上传文件有4种格式,分别是数组缓冲区,二进制字符串,数据URL和文本,我想知道如何选择一种。

在几篇文章中,表示当您想显示上传的图片时,数据URL是好的,而当您操纵文件时,数组缓冲区是好的。你怎么看?并且,什么时候是选择二进制字符串或文本格式的好时机?

Kai*_*ido 5

对于“文件上传器”,您根本不应该使用FileReader。

您无需阅读文件即可上传,可以直接将其作为Blob发送

如果需要在当前页面中显示它,则仍然不需要FileReader,请从Blob创建一个blobURI,它将直接指向磁盘上的文件,而不会浪费大量内存。

inp.onchange = e => {
  // yes that's all synchronous...
  const url = URL.createObjectURL(inp.files[0]);
  const img = new Image();
  img.src = url;
  document.body.appendChild(img);
};
Run Code Online (Sandbox Code Playgroud)
<input type="file" id="inp" accept="image/*">
Run Code Online (Sandbox Code Playgroud)


FileReader的唯一用例是当您需要访问File的内容时,例如,

  • 如果要加载文本文件(或csv或json)并进行解析,则可以使用readAsText()方法。
  • 如果您想读取/编辑某个二进制文件(例如,读取JPEG文件的元数据?),则将使用readAsArrayBuffer(),并在此缓冲区中工作。
  • readAsDataURL()不幸的是,它被滥用太多了,如前所述,在99%的情况下,可以使用blobURI或直接通过Blob完成此dataURI的操作。我能看到的唯一一种情况是在一个独立的文档中附加二进制数据...或者,并不是每个网站每天都发生的事情...
  • readAsBinaryString()是没有用的,甚至已经从标准中删除了。如果确实需要File的二进制字符串表示形式,则可以从ArrayBuffer生成一个二进制字符串表示形式,但是使用此String字符串所做的事情是一个谜。(直接与ArrayBuffer一起使用)。