在制作简单的图片上传器时,我正在学习FileReader API。有4种格式,即数组缓冲区,二进制字符串,数据URL和文本,用于上传文件,我想知道如何选择一种。
在几篇文章中,this说当你想要显示上传的图片时数据URL是好的,并且当你操作文件时数组缓冲区很好。你怎么看?而且,何时是选择二进制字符串或文本格式的好机会?
你不需要阅读文件就能上传它,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的内容时,例如,
readAsText()
方法。readAsArrayBuffer()
,并在这个缓冲区工作。readAsDataURL()
被滥用太多了,如前所述,在99%的情况下,你可以用blobURI或blob直接完成这个dataURI。我能看到的唯一一个案例就是在一些独立的文档中附加二进制数据......或者,每个网站上每天都不会发生这种情况......readAsBinaryString()
相当无用,甚至被删除了标准。如果你真的需要你的文件的二进制字符串表示,你可以从ArrayBuffer生成一个,但你对这个字符串做什么是一个谜。 (直接使用ArrayBuffer)。