【问题标题】:Is it possible to read an already existing file using FileReader?是否可以使用 FileReader 读取已经存在的文件?
【发布时间】:2018-10-24 18:58:21
【问题描述】:

我正在尝试读取存储在我(主机)计算机上的文本文件的内容。当我遇到 Javascript 的 FileReader 时,我认为它是完成这项工作的完美工具。 However, every example or question I see online 展示了如何使用它来读取从用户计算机上传的文件(因此他们可以使用事件目标指向他们要读取的文件)ortheyuseAJAX(well,atleastthetheXMLHttpRequestobject)来读取他们自己的文件。 >

那么是否可以使用 FileReader 从本地(到主机)文件中读取?当我正在研究这个问题时,这让我想知道这一切是否都错了,但这是通过 AJAX 使用网页上文本文件中的信息的唯一方法吗?这似乎是错误的,似乎必须有更简单的方法。

【问题讨论】:

  • 好的,那么可以使用 FileReader 从计算机内存中下载文件,还是需要做其他事情来做到这一点?
  • 不,FileReader 只是一个阅读器。它不下载任何东西*。好吧,完全学究起来,如果文件存储在用户的 HDD 上,FileReader 将触发对该文件的 IO 访问,但不是 FileReader 本身这样做,其他 API(如 AJAX POST)会触发这个也是。

标签: javascript


【解决方案1】:

FileReader 需要Blob。这是一个表示内存中二进制文件的对象。

这个Blob 来自哪里并不重要,但你需要让浏览器分配给它的内存,以便FileReader 可以访问它。 FileReader 不会自行下载任何内容。

因此,如果您正在谈论存储在服务器上的文件,则浏览器必须从那里将其下载到计算机的内存中。至于如何实现,有很多种方式,最常见的就是AJAX,只要数据是从服务器下载并可以访问的,至少要从中构建一个Blob,然后FileReader 会很开心。

如果您谈论的是存储在用户磁盘上的文件,则需要授予浏览器访问权限并将其加载到内存中,这通常使用<input type="file"> 元素来完成,因为出于安全原因,否则浏览器不会授予对用户磁盘的访问权限。

【讨论】:

  • 好吧,这是有道理的。有没有比 AJAX 更容易从我的服务器下载文件的方法,还是“最好”的方法?另外,使用 FileReader 是从服务器读取/显示文件的典型方式,还是有更常见和更好的方式?
  • 啊我现在看到它是一个文本文件,所以你不需要 FileReader。 xhr.responseText 将包含您的文本数据。是的,这可能是最好的方式,虽然不是唯一的方式(例如 iframe 也可以)
  • 好的,完美,谢谢!太糟糕了,没有更简单的方法来读取这些数据,而无需经历实例化对象和编写回调函数等所有繁琐的工作,但如果这是我必须做的,那就这样吧!
  • fetch API 已经被简化为 fetch(url).then(resp => resp.text()).then(textData => ...)
猜你喜欢
  • 1970-01-01
  • 2011-06-29
  • 2019-07-04
  • 2012-09-04
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多