JavaScript中从DataURL下载文件

7

从DataURL中获取的字符串,如何以最佳方式将其下载为文件?

到目前为止,我所得到的方法是使用基本的window.open("myDataURL");,但是我无法通过这种方式更改文件名。

window.open('data:application/msword;base64,0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAA
             PgADAP7/CQAGAAAAAAAAAAAAAAACAAAANQAAAAAAA
             AAAEAAANwAAAAIAAAD+////AAAAADQAAABsAA/',
             '_blank','height=300,width=400');

我想知道是否有任何方法可以正确处理这些数据。

请查看 https://dev59.com/9ljUa4cB1Zd3GeqPSpSq#6465780。 - user123444555621
我以前见过这个问题,文件名变成了“rVPjLUq1.part”,就像我上面发布的示例一样。 - eBergamo
正如Wladimir Palant所写,这个问题已经在W3C邮件列表上进行了讨论,但是“到目前为止,这似乎还没有被纳入任何规范,更不用说浏览器实现了。”恐怕在这个问题上还没有取得任何进展。 - user123444555621
2个回答

3
您可以给锚点元素添加一个“download”属性。 示例:
<a download="abcd.zip" href="data:application/stream;base64,MIIDhTCCAvKg........">download</a>

1
这在IE中不受支持。 - Nipuna
它也没有解决原帖提出的问题,即如何通过JavaScript而不是HTML指定窗口打开属性的文件名。 - srlm
点击链接将打开下载对话框,无需使用window.open。 - cuixiping

0

试试这个:

data:application/msword;fileName=test.doc;base64,0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAACAAAANQAAAAAAAAAAEAAANwAAAAIAAAD+////AAAAADQAAABsAA/

但这只是通过谷歌搜索的猜测,可能取决于浏览器。真正的答案是,你不能 - 参见http://www.ietf.org/rfc/rfc2397以供参考,规范中没有任何支持文件名的内容。


是的,它没有起作用。它只适用于图像使用吗?因为如果您无法重复使用此“值”并重新创建文件,则这并不是一个很大的优势。我仍在寻找解决这些问题的答案...同时使用JSP或Java。但我看不到如何以这种方式处理dataURL的链接。 - eBergamo
Data URIs的用途是以URI兼容的方式处理原始数据。例如,将图像或文本嵌入到另一个文档中,而该文档原本需要外部链接的元素。 - bardiir
我明白了。在我们获取文件内容的方法中,我们使用了reader.readAsDataURL(file);如果我改用readAsBinaryString,那么我能否成功地重新创建我的文件(pdf、xls、docs)呢? - eBergamo
1
fileName 参数会被忽略。文件将以 [随机字符串].part 的格式保存。 - powtac

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