我遇到一种情况,我需要为用户提供将本地存储在客户端内存中的一些数据保存到磁盘的选项。我当前的解决方法是有一个像这样的处理程序
(define-handler (download-deck) ((deck :json))
(setf (header-out :content-type) "application/json"
(header-out :content-disposition) "attachment")
deck)
它的作用与它看起来的完全一样。客户端将数据发送出去,并将返回的文件保存在本地。
这看起来很愚蠢。
请告诉我有一种更好、更简单、跨浏览器的方法,可以让客户端通过文件保存对话框将一些本地数据保存到磁盘上。
我读到的关于这个主题的每个答案要么是说“不,你不能用 javascript 保存文件”,要么是“是的,Chrome API 的这个半文档部分可以让你在三页内完成它”。
最佳答案
This "FileSaver" library may help 。如果您希望它能够合理地跨浏览器,您还需要 this在尚未实现的地方实现 W3C Blob API。两者都尊重命名空间,并且完全与框架无关,因此不必担心命名问题。
一旦您包含了这些内容,并且只要您只保存文本文件,您就应该能够
var blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"});
saveAs(blob, "hello world.txt");
请注意,new Blob
的第一个参数必须是字符串列表,并且您需要指定文件名。例如,用户将看到该文件正在本地下载,但无法自己命名。希望他们使用的浏览器可以处理本地文件名冲突...
关于javascript - 如何从客户端浏览器中的内容生成并提示保存文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18690450/