如何选择FileReader阅读方法?

问题描述 投票:0回答:1

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

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

javascript image image-processing
1个回答
3
投票

For a "File Uploader", you should simply not use a FileReader at all.

你不需要阅读文件就能上传它,you can send it as a Blob directly

如果你需要在当前页面中显示它,你仍然不需要FileReader,create a blobURI from the Blob,它将直接指向磁盘上的文件,没有无用的内存膨胀。

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);
};
<input type="file" id="inp" accept="image/*">

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

  • 如果要加载文本文件(或csv或json)并解析它,那么您将使用readAsText()方法。
  • 如果你想阅读/编辑一些二进制文件(例如读取JPEG文件的元数据?),那么你将使用readAsArrayBuffer(),并在这个缓冲区工作。
  • 遗憾的是readAsDataURL()被滥用太多了,如前所述,在99%的情况下,你可以用blobURI或blob直接完成这个dataURI。我能看到的唯一一个案例就是在一些独立的文档中附加二进制数据......或者,每个网站上每天都不会发生这种情况......
  • readAsBinaryString()相当无用,甚至被删除了标准。如果你真的需要你的文件的二进制字符串表示,你可以从ArrayBuffer生成一个,但你对这个字符串做什么是一个谜。 (直接使用ArrayBuffer)。
© www.soinside.com 2019 - 2024. All rights reserved.