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

Javascript 使用数据URI提示用户保存文件,javascript,file,save,prompt,data-uri,Javascript,File,Save,Prompt,Data Uri,我正在编写一个web应用程序,它允许用户选择一个PNG文件,在其中写入iTXt块,然后将其保存回本地文件系统。我会使用新的FileWriterAPI来实现这一点,但目前只有谷歌浏览器添加了对它的支持 由于我的文件在内存中表示为一个URI,因此我使用数据URI提示用户保存文件,如下所示: window.location.href = "data:application/octet-stream;base64," + btoa(blob); 由于mime类型是application/octet-s

我正在编写一个web应用程序,它允许用户选择一个
PNG
文件,在其中写入
iTXt
块,然后将其保存回本地文件系统。我会使用新的
FileWriter
API来实现这一点,但目前只有谷歌浏览器添加了对它的支持

由于我的文件在内存中表示为一个URI,因此我使用数据URI提示用户保存文件,如下所示:

window.location.href = "data:application/octet-stream;base64," + btoa(blob);
由于mime类型是
application/octet-stream
,浏览器会提示用户打开或保存它。但是,问题是用户不知道它是哪种类型的文件。因此,用户必须手动添加文件扩展名


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

如果这是HTTP,那么您必须将内容配置设置为附件,即使其mime类型已知也要保存文件,或者为八位字节流类型的附件设置文件名。但是,这两个头都不能使用进行模拟,因此我看不到使用这样的URI打开“另存为…”对话框的方法

其他人问了如何使用,从那里的答案来看,似乎有现成的解决方案,只要客户端安装了Flash(并且没有被阻止),这些解决方案就可以工作


因此,也许您可以尝试几种解决方案,从您提到的
FileWriter
开始,如果不可用,尝试基于flash的方法,然后返回到
data:
URI,并显示关于文件扩展名的警告消息。这样,您可能会为每个客户机获得尽可能最佳的结果。

尽管它不使用
数据:
URI,但可能有您想要的答案。