例如,如果你点击链接:
数据:应用程序/八进制;base64 SGVsbG8 =
浏览器将提示您下载一个文件,该文件由超链接本身中base64所包含的数据组成。是否有办法在标记中建议一个默认名称?如果不是,是否有JavaScript解决方案?
例如,如果你点击链接:
数据:应用程序/八进制;base64 SGVsbG8 =
浏览器将提示您下载一个文件,该文件由超链接本身中base64所包含的数据组成。是否有办法在标记中建议一个默认名称?如果不是,是否有JavaScript解决方案?
当前回答
No.
整个目的是它是一个数据流,而不是一个文件。数据源不应该知道用户代理将其作为文件处理……事实并非如此。
其他回答
根据RFC 2397,没有。
<a>元素似乎也没有任何可以使用的属性。
然而,HTML5随后在<a>元素上引入了下载属性,尽管在编写时支持并不普遍(例如,没有MSIE支持)。
下面的Javascript代码片段通过使用链接的新“下载”属性并模拟点击在Chrome中工作。
function downloadWithName(uri, name) {
var link = document.createElement("a");
link.download = name;
link.href = uri;
link.click();
}
下面的例子展示了它的使用:
downloadWithName("data:,Hello%2C%20World!", "helloWorld.txt")
(这个答案已被新技术淘汰,但出于历史兴趣,将保留在这里。)
这听起来有点粗俗,但我以前也遇到过同样的情况。我正在用javascript动态生成一个文本文件,并希望通过使用data-URI进行编码来提供它供下载。
这在轻微的用户干预下是可能的。生成一个链接<a href="data:…">右键单击我并选择“Save Link As…”并保存为“example.txt”</a>. txt”。正如我所说,这是不优雅的,但如果你不需要专业的解决方案,它是可行的。
这可以通过使用flash将名字复制到剪贴板中来减轻痛苦。当然,如果你允许自己使用Flash或Java(现在浏览器的支持越来越少了),你可能会找到另一种方法来做到这一点。
No.
整个目的是它是一个数据流,而不是一个文件。数据源不应该知道用户代理将其作为文件处理……事实并非如此。
使用download属性:
<a download='FileName' href='your_url'>
下载属性适用于Chrome、Firefox、Edge、Opera、桌面版Safari 10+、iOS Safari 13+,但不适用于IE11。