我有一个存在内存中的数据URI,我希望用户能够将其下载。
这个JSFiddle在Chrome浏览器中可以工作,但在Firefox浏览器中无法正常工作: http://jsfiddle.net/6W2TY/
当您点击运行时,它会在Chrome中下载微小的图像,但在Firefox中没有任何反应。有谁能帮我理解为什么它在Firefox中不起作用,并告诉我需要做什么才能使其正常工作?
谢谢!
我有一个存在内存中的数据URI,我希望用户能够将其下载。
这个JSFiddle在Chrome浏览器中可以工作,但在Firefox浏览器中无法正常工作: http://jsfiddle.net/6W2TY/
当您点击运行时,它会在Chrome中下载微小的图像,但在Firefox中没有任何反应。有谁能帮我理解为什么它在Firefox中不起作用,并告诉我需要做什么才能使其正常工作?
谢谢!
我知道这是一个老帖子,但是当我在FF中遇到下载文件的类似问题时,我找到了它。虽然这可能在提问时在FF中无效,但现在可以使用。
a = document.createElement('a');
document.body.appendChild(a);
a.download = name;
a.href = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABWSURBVDhPY0xISPh//0UOA7mAiVyNMH2jBjAwkBQGjD9KGBTEJ6OEO0kG2NvbMwCjnXwDsEU5SS5ANuDhjRCGJbPFSQsDdBfIyMhQZgDIQLK9QLWkDABPsQw5I+5qmAAAAABJRU5ErkJggg==";
a.click();
从原始的代码中所作的更改如下:
document.body.appendChild(a);
的语句;triggerEvent()
修改为 a.click()
。这里是更新后的代码示例: http://jsfiddle.net/70f91ao7/6/
另一种强制下载的方法是将用户重定向到图像,如下所示:
// generate the image
var img = ""
// then call a function maybe onClick or something
downloadImage(img);
function downloadImage(data) {
location.href = "data:application/octet-stream;base64," + data;
}
或者简短版
location.href = "data:application/octet-stream;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAOCAYAAAAmL5yKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABWSURBVDhPY0xISPh//0UOA7mAiVyNMH2jBjAwkBQGjD9KGBTEJ6OEO0kG2NvbMwCjnXwDsEU5SS5ANuDhjRCGJbPFSQsDdBfIyMhQZgDIQLK9QLWkDABPsQw5I+5qmAAAAABJRU5ErkJggg=="
作为一种替代方案,如果您正在服务器端处理图像,则可以通过设置content-disposition头来强制下载。
PHP示例
header('Content-Disposition: attachment; filename="image.png"');