编写和下载文件客户端跨浏览器
Writing and downloading files clientside crossbrowser
我有一个程序,用户可以在其中执行一些操作(即单击几个按钮)。我想记录他们的点击和他们点击的按钮,让用户在点击单独的"下载"按钮时下载一个带有点击记录的文本文件。我查看了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
- 打开数据库
- 在升级数据库时创建对象存储
- 启动事务并请求执行一些数据库操作,如添加或检索数据
- 通过侦听正确类型的DOM事件来等待操作完成
- 做点什么以及结果(可以在请求对象上找到)
以下是一些关于IndexedDB的教程。
- https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB
- http://www.html5rocks.com/en/tutorials/indexeddb/todo/
至于向用户提供该文件,如前所述,您必须将文件上传到服务器,并根据"下载"请求进行下载。不幸的是,你不得不欺骗用户,让他们把机器上已经有的数据给他们。不管怎样,希望这一切都有帮助。
- 删除客户端浏览器上不需要的内容
- AngularJS这样的开源Javascript是如何在客户端浏览器上运行的
- 在客户端/浏览器端存储照片(不是照片的链接)
- JS文件未在客户端浏览器上更新
- sails 客户端(浏览器)如何侦听从不同端口发出(爆破)的套接字消息
- php 服务器端计时器 独立于客户端浏览器
- 如何在客户端浏览器中执行类似SQL的查询
- 强制刷新客户端浏览器
- 如何从客户端浏览器中的内容生成和提示保存文件
- 如何在客户端(浏览器/CLI等)启用Javascript文件(如jQuery)和CSS文件的缓存
- 字节图像未从客户端浏览器保存在数据库中
- HTTPS协议的前端(客户端浏览器)是否需要密码加密
- NowJS-客户端/浏览器通信(不联系“所有人”)
- 在服务器上推送新版本后刷新客户端浏览器窗口
- 在客户端浏览器中滚动窗口
- 迫使客户端浏览器重新下载我们的asp.net网络应用程序的优雅方式'.css和.js文件(不完全禁用缓存)
- 如何在客户端浏览器上呈现完整网页的副本后立即在服务器端存储该副本
- 如何调试客户端浏览器/HTML结构的性能问题
- 如何在jQuery.post()之后将文件从Java发送回客户端浏览器
- 使用wcf从服务器获取文件并在客户端浏览器下载