如何使用Javascript编程创建一个客户端文件,以便用户可以下载?

6
我想尝试创建一个JavaScript应用程序,该应用程序接受用户在表单中输入的内容,然后根据用户的表单输入生成文件。
该文件应该能够被用户下载,而无需触及服务器。
如何使用JavaScript在客户端创建文件?在客户端的哪个位置可以存储它,以便可以在不首先在服务器上创建文件的情况下下载?
更新:如Graham所回答的那样,更具体地说,我正在寻找一种创建文件对象(Blob)而无需必要地触及文件系统的方法,该文件对象可以被用户下载。谢谢Graham!

2
你们有特定的浏览器和浏览器版本要求吗?我问这个是因为我觉得你们需要使用data: URL协议,不过并不是所有版本的浏览器都支持它。 - ruakh
你可以尝试喷洒堆 :P - Travis J
这些链接非常有帮助。Flash 不是一个可行的解决方案,而另一个线程的解决方案在不同的浏览器上效果并不好。我找到了这个网站:http://www.html5rocks.com/en/tutorials/file/filesystem/,但仍然不太满意。 - ZenBalance
我认为使用客户端是不可能实现这个的。FileSystem并不是HTML5的官方组成部分,只有Chrome浏览器支持它。 - Shinigamae
1
实际上,它不仅被Chrome支持,许多浏览器都实现了文件系统API。而且,它实际上是w3的官方规范,所以,是的,它是“HTML5”的一部分。 - Graham Robertson
1个回答

17

不必使用文件系统,就可以完成这个操作的一种方法是创建“blobs”(二进制大对象)。假设我们有一批数据(在您的情况下,来自于一个表格),并且希望将其保存到文本“文件”中。实际上,我们可以按照以下方式进行:

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/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接