【问题标题】:Writing and downloading files clientside crossbrowser写入和下载文件客户端跨浏览器
【发布时间】:2014-09-24 18:37:44
【问题描述】:

我有一个程序,用户在其中执行一些操作(即单击几个按钮)。我想记录他们的点击和他们点击的按钮,以允许用户在点击单独的“下载”按钮时下载一个带有点击记录的文本文件。我查看了 HTML 5 的文件系统 API,但它们似乎没有跨浏览器支持。理想情况下,我希望整个文件生成和下载方案完全在客户端,但我也对服务器端的想法持开放态度。

TL;DR:本质上,我在 Vanilla JS 或 jQuery 中寻找与 Java 的 FileWriter、FileReader、ObjectOutputStream 和 ObjectInputStream 等效的东西(我希望远离 php,但我会使用它作为最后的选择) .

另外,为什么不是所有的浏览器都支持文件系统 API? (我猜这会使 MSWord 和 Pages 与所有可能出现的开源客户端文本编辑器一起停业。)

【问题讨论】:

  • 记录一次点击需要写入文件或数据库。我会选择后者。使用数据库不会依赖跨浏览器的依赖。
  • 我真的很想使用写入文件的方法。我无权访问数据库,因为我的网络服务器范围有限,我希望主要通过客户端运行此网页
  • 另外,如果我的用户主要使用 chrome 或 chrome os,有没有办法专门为他们的浏览器做这个客户端?我总是可以根据他们的浏览器从一个公共页面重定向到不同版本的页面
  • 您可以研究使用平面文件数据库。谷歌那个词,你会发现很多结果。这是sourceforge.net/projects/ffdb-php 的结果之一

标签: javascript php jquery html html5-filesystem


【解决方案1】:

不幸的是,HTML5 文件系统是no longer a part of the spec,长话短说 FF 拒绝实施,因为他们声称您可以在文件系统 API 中执行的所有操作都可以在 HTML5 Indexeddb 中执行(这几乎是真的)。请参阅this blog post 了解更多关于 FF 未实施的原因。我不知道IE的故事。 (我可能夸大了为什么 FireFox 没有实现,我仍然很沮丧,因为您实际上无法在 indexeddb 中完成所有可以在新的“Chrome 文件系统 API”中执行的操作)

通常,如果这三个浏览器中的两个实现了一个规范,它就会保留在该规范中。否则,该规范将成为孤立的。但是,我相当肯定文件系统 API 没有起飞的一个重要原因是 IndexedDB API (caniuse IndexedDB) 在引入这两个规范时真正起飞了。如果您想要跨浏览器支持,请查看此 api。

这就是说,如果您仍然使用文件系统 api,一些开发人员写了一个 nice wrapper around the IndexedDB,那么文件系统 api 无论如何都不会真正为您提供流。给定一个 fileWriter 对象,您必须继续将事件附加到给定文件。然后,您必须读取整个文件并通过 ajax 请求发送到服务器,然后在成功上传后从服务器下载。

更好的方法是使用 developer.mozilla 中所述的 IndexedDB api

  1. 打开一个数据库。
  2. 在升级数据库中创建对象存储。
  3. 启动事务并请求执行某些数据库操作,例如添加或检索数据。
  4. 通过侦听正确类型的 DOM 事件等待操作完成。
  5. 做点什么 结果(可以在请求对象上找到)。

这里有一些关于 IndexedDB 的教程。

至于向用户提供该文件,如前所述,您必须将文件上传到服务器并根据“下载”请求进行下载。不幸的是,您必须欺骗用户向他们提供机器上已经存在的数据。无论如何,希望这一切都会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2018-04-09
    • 2012-06-06
    • 1970-01-01
    • 2010-09-18
    • 2011-06-13
    • 2022-06-25
    相关资源
    最近更新 更多