强制下载在 JavaScript 中使用 FileWriter 创建的 blob [重复]

Posted

技术标签:

【中文标题】强制下载在 JavaScript 中使用 FileWriter 创建的 blob [重复]【英文标题】:Force download for blob created with FileWriter in JavaScript [duplicate] 【发布时间】:2011-05-27 23:27:16 【问题描述】:

html5 引入了 FileWriter 类。通过这个类,您可以制作 Blob。 (文件是 Blob 的扩展。)使用 javascript,您可以创建一个 Blob,例如使用 dataURL 显示它。

例子:

var bb = new BlobBuilder();
bb.append('some text')
var blob = bb.getBlob('text/plain');

var fr = new FileReader();
fr.onload = function(e) 
 document.location = this.result; // voila the dataURL

fr.readAsDataURL(blob);

但这还不够好:) 我希望下载新创建的(文本)文件。不在同一窗口或单独的窗口中打开。

有办法吗?必须有。怎么样?

(讨论已经存在于Google Chrome group)

更新 文件 API 已更改,因为规范已更改(或什么!?)。 Webkit 打破了与BlobBuilder 的向后兼容性,现在称为WebKitBlobBuilder。 Same example differently on jsFiddle

更新 现在创建 Blob 的工作方式再次不同(不再有 append()):

blob = new Blob(['some text'], type: 'text/plain');

【问题讨论】:

【参考方案1】:

下载标签与 Blob 对象的结合可以解决问题(至少在最新的 chrome 版本中)。看到这个fiddle:

var blob = new Blob(['blaaaaat'], type: 'text/plain');
$('a').attr("href", window.URL.createObjectURL(blob));
$('a').attr("download", "woeii.txt");

F̶i̶r̶e̶f̶o̶x̶̶d̶o̶e̶s̶n̶'̶t̶̶s̶u̶p̶p̶o̶r̶t̶̶t̶h̶e̶̶d̶o̶w̶n̶l̶o̶a̶d̶̶a̶t̶t̶r̶i̶b̶u̶t̶e̶ 虽然(它确实支持 Blob 对象)。火狐中下载属性的实现讨论are available here:

编辑:自 2013 年 10 月 3 日起,最新的 firefox 版本现在支持下载属性

【讨论】:

错误的小提琴链接,我的意思是这个:jsfiddle.net/NSCJH 这是我一直在使用的。 (我不使用 Firefox。)我不知道 Firefox 还不支持。 不错!我不知道下载属性。 有没有不等用户点击链接就触发下载的方法?我有一个按钮,用户单击该按钮会生成数据,然后我想立即下载。只是在你的小提琴中做 $('a').click() 似乎没有用。 @BenDilts,刚刚遇到这个可能对您有用的答案:***.com/a/28647235/897968【参考方案2】:

这是一个纯 Javascript 解决方案,用于创建文本 blob 并下载为文本文件

var fileContent = 'This is sample text file';
var fileName = 'sampleFile.txt';

const blob = new Blob([fileContent],  type: 'text/plain' );
const a = document.createElement('a');
a.setAttribute('download', fileName);
a.setAttribute('href', window.URL.createObjectURL(blob));
a.click(); // EXECUTING CLICK EVENT WILL AUTO-DOWNLOAD THE FILE

【讨论】:

download 属性不再采用文件名。很久以前它曾经是,但现在它只是一个布尔属性。 See MDN. -- 编辑:或者可能是这样..?我从来没有见过它工作。是吗? 是的。从您链接的页面中:“如果属性具有值,则将其用作保存提示中的预填充文件名(用户仍然可以根据需要更改文件名)。”

以上是关于强制下载在 JavaScript 中使用 FileWriter 创建的 blob [重复]的主要内容,如果未能解决你的问题,请参考以下文章

javascript 使用Javascript强制下载

强制下载文件

如何使用 Laravel 强制下载 png 文件?

强制文件下载

使用Jquery强制从外部服务器下载映像

使用啥 R 命令强制从 iCloud 下载文件