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

时间:2014-09-24 18:37:45

标签: javascript php jquery html5 html5-filesystem

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

TL; DR:基本上我正在寻找与Vanilla JS或jQuery中的Java的FileWriter,FileReader,ObjectOutputStream和ObjectInputStream相当的(想要远离php,但我会将它作为最后一个选项使用) 。

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

1 个答案:

答案 0 :(得分:0)

不幸的是HTML5文件系统是no longer a part of the spec,长篇短文FF拒绝实施,因为他们声称你可以在文件系统API中做的所有事情都可以在HTML5 Indexeddb中实现(这大部分都是真的)。有关FF未实现的原因,请参阅this blog post。我不知道IE的故事。 (我可能已经夸大了为什么FireFox没有实现,我仍然感到沮丧,因为你无法在indexeddb中完成所有你可以在noew“Chrome文件系统API”中做的事情)

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

如果你仍然在文件系统api上设置一些开发人员编写了nice wrapper around the IndexedDB,那么文件系统api实际上并不会为你提供流。在给定fileWriter对象的情况下,您必须继续将事件附加到给定文件。然后你必须阅读整个文件并通过ajax请求发送到服务器,然后在成功上传后从服务器下载。

更好的途径是使用developer.mozilla

中所述的IndexedDB apiwhich
  
      
  1. 打开数据库。
  2.   
  3. 在升级数据库中创建对象库。
  4.   
  5. 启动事务并发出请求以执行某些数据库操作,例如添加或检索数据。
  6.   
  7. 通过聆听正确的DOM事件等待操作完成。
  8.   
  9. 做点什么   结果(可以在请求对象上找到)。
  10.   

以下是有关IndexedDB的几个教程。

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