我正在编写一个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
,浏览器会提示用户打开或保存它。但问题是用户不知道它是哪种类型的文件。因此用户必须手动添加文件扩展名。
目前我提醒用户需要保存文件的扩展名。然而,这似乎是一个不优雅的解决方案。有没有更好的方法来实现相同的结果?
答案 0 :(得分:1)
如果这是HTTP,那么您必须将内容处置设置为附件,即使其mime类型已知也可以保存文件,或者设置octet-stream类型附件的文件名。但是,这两个标题都不能使用data:
URI进行模拟,所以我看不到使用这样的URI打开“另存为...”对话框。
其他人已经问过如何open a save file dialog for a js variable,并从那里的答案判断,似乎有现成的解决方案,只要客户端安装了Flash(并且没有阻止),就可以使用。
所以也许你可以尝试使用seriall解决方案,从你提到的FileWriter
开始,尝试基于闪存的方法(如果不可用),并回退到data:
URI,并提供有关的警告消息文件扩展名。这样你就可以为每个客户获得最好的结果。