如何从客户端浏览器中的内容生成并提示保存文件?

IT技术 javascript file save download
2021-03-12 05:11:50

我有一种情况,我需要让我的用户选择将一些本地存储在其客户端内存中的数据保存到磁盘。我目前的解决方法是有一个这样的处理程序

(define-handler (download-deck) ((deck :json))
  (setf (header-out :content-type) "application/json"
    (header-out :content-disposition) "attachment")
  deck)

这正是它看起来的样子。客户端发送他们的数据,并将返回的文件保存在本地。

这似乎很愚蠢。

拜托,告诉我有一个更好的,更简单的,跨浏览器的方式,让客户节省一些本地数据到他们与文件保存对话框盘。

我读到的关于这个主题的每个答案要么说“不,你不能用 javascript 保存文件”或“是的,Chrome API 的这个半文档部分可以让你在三页中完成”。

3个回答

这个“FileSaver”库可能会有所帮助如果您希望它合理地跨浏览器,您还需要来在尚未实现的地方实现 W3C Blob API。两者都尊重命名空间,并且完全与框架无关,所以不用担心命名问题。

一旦你包含了这些,只要你只保存文本文件,你应该能够

var blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"});
saveAs(blob, "hello world.txt");

请注意, to 的第一个参数必须new Blob是字符串列表,并且您需要指定文件名。如在,用户将看到此文件正在本地下载,但无法自己命名。希望他们使用的浏览器可以处理本地文件名冲突......

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会无效。
2021-04-23 05:11:50
同意。但我不能参考整个图书馆。
2021-05-07 05:11:50
有趣的是 blob(= 二进制大对象)接收字符我希望这里有 clob
2021-05-07 05:11:50
非常简单,谢谢@Dave
2021-05-07 05:11:50
我掩护你。
2021-05-10 05:11:50

这是我的代码:

<a id='tfa_src_data'>Export</a>

document.getElementById('tfa_src_data').onclick = function() {                  
                        var csv = JSON.stringify(localStorage['savedCoords']);
                        var csvData = 'data:application/csv;charset=utf-8,' 
                                       + encodeURIComponent(csv);
                        this.href = csvData;
                        this.target = '_blank';
                        this.download = 'filename.txt';
                    };

您可以使用各种数据类型。

这不适用于 xlsx 类型的文件
2021-04-25 05:11:50
非常适合我,谢谢!
2021-05-05 05:11:50
@Abude 它适用于 xls jsfiddle.net/kmqz9/265
2021-05-13 05:11:50

HTML5 本地存储概念可能会对您有所帮助,具体取决于您尝试执行的操作。

那么什么是 HTML5 存储?简而言之,它是网页在客户端 Web 浏览器中本地存储命名键/值对的一种方式。与 cookie 一样,即使在您离开网站、关闭浏览器选项卡、退出浏览器或其他任何内容后,这些数据仍然存在。与 cookie 不同的是,此数据永远不会传输到远程 Web 服务器(除非您特意手动发送)。http://diveintohtml5.info/storage.html

还有文件系统 API(目前仅在 Chrome AFAIK 中实现) http://www.html5rocks.com/en/tutorials/file/filesystem/

我希望这些新的 API 可以更快地标准化。
2021-05-02 05:11:50