编写和下载文件客户端跨浏览器

Writing and downloading files clientside crossbrowser

本文关键字:客户端 浏览器 文件 下载      更新时间:2023-09-26

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

TL;DR:从本质上讲,我正在VanillaJS或jQuery中寻找一个与Java的FileWriter、FileReader、ObjectOutputStream和ObjectInputStream等效的文件(我想远离php,但我会把它作为最后一个选项)。

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

不幸的是,HTML5-File-system不再是规范的一部分,长话短说的FF拒绝实现,因为他们声称你在File-system API中所能做的一切都可以在HTML5-Indexeddb中实现(这基本上是真的)。请参阅这篇博客文章,了解更多关于FF为什么没有实现的信息。我不知道IE的故事。(我可能已经解释了为什么FireFox没有实现,我仍然很沮丧,因为你实际上不能在indexeddb中完成你在noew"Chrome文件系统API"中可以完成的所有工作)

通常,如果这三个浏览器中有两个实现了一个规范,它就会留在规范中。否则,该规范就会成为孤立的。然而,我可以肯定,文件系统api没有兴起的一个重要原因是IndexedDBneneneba api(犬科动物IndexedDB)在引入这两种规范时真正兴起了。如果您想要跨浏览器支持,请查看此api。

也就是说,如果你仍然在文件系统api上设置,一些开发人员围绕IndexedDB编写了一个很好的包装器,那么文件系统api实际上不会为你提供流。在给定fileWriter对象的情况下,您必须不断地将事件追加到给定的文件中。然后,您必须读取整个文件,并通过ajax请求发送到服务器,然后在成功上传后从服务器下载。

更好的方法是使用developer.mozilla 上所述的IndexedDB apiit

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

以下是一些关于IndexedDB的教程。

  • https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB
  • http://www.html5rocks.com/en/tutorials/indexeddb/todo/

至于向用户提供该文件,如前所述,您必须将文件上传到服务器,并根据"下载"请求进行下载。不幸的是,你不得不欺骗用户,让他们把机器上已经有的数据给他们。不管怎样,希望这一切都有帮助。