如何下载由 JavaScript 生成的文件,避免 Chome 自动打开?
How to download a file generated with JavaScript, avoiding automatic opening of Chome?
我正在开发一个 JavaScript 小网络邮件。
我从服务器收到一个 Base64 编码的字符串,代表一个文件(可以是任何类型)。我解码字符串,将其映射到 Uint8Array
,然后生成一个 Blob
对象,我使用
创建一个数据 URI
FileReader.readAsDataURL(blob)
到这里为止非常简单,但我在下载部分遇到了问题。
我把DataURI放在了
window.open(dataURI)
但是 chrome 打开一个新的 window 并显示我的图片或文字。但我需要避免这种行为,而是下载文件。
我知道这可以用 Content-Disposition "attachment"
完成,但我不确定这是否是我的情况,因为我是从服务器的字符串生成文件的。
谁能帮我理解一下?
您尝试使用 "saveAs" 了吗?
saveAs(blob, "hello.zip");
如果您需要广泛的浏览器支持,您可以尝试 polifill。 More information
我很确定你可以设置 blob 的类型
var blob = new Blob(["Hello world!"], { type: "application/download" });
编辑:
没有FileSaver.js:
var blob = new Blob(["Hi stack"], {type: 'application/download'});
var reader = new FileReader();
reader.onloadend = function(e) {
window.open(reader.result);
}
reader.readAsDataURL(blob);
编辑:
文档和浏览器支持信息("Browser compatibility" 选项卡):
我正在开发一个 JavaScript 小网络邮件。
我从服务器收到一个 Base64 编码的字符串,代表一个文件(可以是任何类型)。我解码字符串,将其映射到 Uint8Array
,然后生成一个 Blob
对象,我使用
FileReader.readAsDataURL(blob)
到这里为止非常简单,但我在下载部分遇到了问题。
我把DataURI放在了
window.open(dataURI)
但是 chrome 打开一个新的 window 并显示我的图片或文字。但我需要避免这种行为,而是下载文件。
我知道这可以用 Content-Disposition "attachment"
完成,但我不确定这是否是我的情况,因为我是从服务器的字符串生成文件的。
谁能帮我理解一下?
您尝试使用 "saveAs" 了吗?
saveAs(blob, "hello.zip");
如果您需要广泛的浏览器支持,您可以尝试 polifill。 More information
我很确定你可以设置 blob 的类型
var blob = new Blob(["Hello world!"], { type: "application/download" });
编辑:
没有FileSaver.js:
var blob = new Blob(["Hi stack"], {type: 'application/download'});
var reader = new FileReader();
reader.onloadend = function(e) {
window.open(reader.result);
}
reader.readAsDataURL(blob);
编辑:
文档和浏览器支持信息("Browser compatibility" 选项卡):