使用数据URI提示用户保存文件

时间:2012-07-24 13:19:11

标签: javascript file save prompt data-uri

我正在编写一个Web应用程序,允许用户选择PNG文件,向其写入iTXt块,然后将其保存回本地文件系统。我会使用新的FileWriter API来执行此操作,但目前只有Google Chrome添加了对它的支持。

由于我的文件在内存中表示为binary string,我使用数据URI来提示用户保存文件,如下所示:

window.location.href = "data:application/octet-stream;base64," + btoa(blob);

由于mime-type为application/octet-stream,浏览器会提示用户打开或保存它。但问题是用户不知道它是哪种类型的文件。因此用户必须手动添加文件扩展名。

目前我提醒用户需要保存文件的扩展名。然而,这似乎是一个不优雅的解决方案。有没有更好的方法来实现相同的结果?

1 个答案:

答案 0 :(得分:1)

如果这是HTTP,那么您必须将内容处置设置为附件,即使其mime类型已知也可以保存文件,或者设置octet-stream类型附件的文件名。但是,这两个标题都不能使用data: URI进行模拟,所以我看不到使用这样的URI打开“另存为...”对话框。

其他人已经问过如何open a save file dialog for a js variable,并从那里的答案判断,似乎有现成的解决方案,只要客户端安装了Flash(并且没有阻止),就可以使用。

所以也许你可以尝试使用seriall解决方案,从你提到的FileWriter开始,尝试基于闪存的方法(如果不可用),并回退到data: URI,并提供有关的警告消息文件扩展名。这样你就可以为每个客户获得最好的结果。