如何以编程方式创建用户可以下载的 Javascript 客户端文件? [复制]

Posted

技术标签:

【中文标题】如何以编程方式创建用户可以下载的 Javascript 客户端文件? [复制]【英文标题】:How to programmatically create a client side file in Javascript that can be downloaded by the user? [duplicate] 【发布时间】:2013-02-27 08:32:52 【问题描述】:

我想尝试创建一个 javascript 应用程序,该应用程序从用户的表单中获取输入,然后根据用户的表单输入生成一个文件。

然后用户应该可以在不接触服务器的情况下下载该文件。

您如何使用 JavaScript 在客户端创建文件,以及该文件可以存储在客户端的什么位置,以便无需先在服务器上创建就可以下载它?

更新:更具体地说,正如 Graham 回答的那样,我正在寻找创建文件的方法,而不必触及文件系统本身,而只是创建一个可由用户下载的文件对象(Blob)。谢谢格雷厄姆!

【问题讨论】:

是否有您所针对的特定浏览器和浏览器版本? (我问是因为我认为您需要为此使用data: URL 协议,并且并非所有浏览器版本都支持它。) 你总是可以尝试喷堆:P Create a file in memory for user to download, not through server 的可能副本另请参阅 Javascript: Create and save file 这些链接非常有用。 Flash 不是一个可行的解决方案,并且其他线程的解决方案在浏览器中不能很好地工作。我发现了这个:html5rocks.com/en/tutorials/file/filesystem,但仍然不太令人满意。 实际上不只是Chrome支持,很多浏览器都实现了Filesystem API。而且,实际上,它是官方的 w3 规范,所以,是的,它是“HTML5”的一部分。 【参考方案1】:

无需使用文件系统即可做到这一点的一种方法是创建 blob。假设我们有一堆数据(在您的情况下,来自表单),我们希望将其保存到文本“文件”中。我们实际上可以这样做:

var formBlob = new Blob([someStringVariable],  type: 'text/plain' );

从这里,我们可以链接用户以将其作为实际文件下载,如下所示:

someLink.href = window.URL.createObjectURL(formBlob);

如果我们希望这些数据持久存在,我们可以将我们的 blob 序列化为 base64 字符串并将其保存到 localStorage 或任何其他持久类型的存储。将 blob 转换为 base64 有点超出此答案的范围,但您可以在此处找到一个很好的参考/库:http://blog.danguer.com/2011/10/24/base64-binary-decoding-in-javascript/

【讨论】:

以上是关于如何以编程方式创建用户可以下载的 Javascript 客户端文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中以编程方式创建新的 UIViewController

如何在 Android Studio 中以编程方式上传和下载 Google Drive 上的任何文件

如何以编程方式创建多个 NSTextField?

我们如何在Liferay中以编程方式创建用户和网站模板的角色,权限?

如何以编程方式(iOS)创建 Firebase 动态链接?

在遇到用户创建的错误后,如何以编程方式强制编译器停止编译过程?