如何从javascript中的window.open()重命名下载的文件?

时间:2017-01-31 02:05:00

标签: javascript jquery

我最近直接偶然发现了this JSFiddle about how to convert a table to Excel文件而没有任何花哨的插件。它确实适合我的需要,但它有一个缺陷,我无法重命名它的文件。 Chrome会将文件重命名为download,Firefox会为其提供一个随机名称。

$("#btnExport").click(function (e) {
    window.title = "filename.xls"; // this part doesn't work
    window.open('data:application/vnd.ms-excel,' +     
    $('#dvData').html());
    e.preventDefault();
});

如何重命名下载的文件?

2 个答案:

答案 0 :(得分:2)

可以通过HTTP标头建议文件名,但是没有标准机制可以用数据URI或window.open完成同样的事情。

在下载生成的数据时,有一些方法可以指定文件名,但AFAIK并没有多个浏览器支持的任何文件。

其中一种方法是<a>元素的新下载属性。例如:

下载你的Foo 此属性表示应下载文件(而不是显示,如果适用),并指定应该为下载的文件使用哪个文件名。

您可以使用下载属性window.open()生成不可见的链接,而不是使用.click()

var str = "Name, Price\nApple, 2\nOrange, 3";
var uri = 'data:text/csv;charset=utf-8,' + str;

var downloadLink = document.createElement("a");
downloadLink.href = uri;
downloadLink.download = "data.csv";

document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);

答案 1 :(得分:0)

<a>元素与download属性

一起使用
let file = new Blob([$('#dvData').html()], {type:"application/vnd.ms-excel"});

let url = URL.createObjectURL(file);

let a = $("<a />", {
  href: url,
  download: "filename.xlsx"
})
.appendTo("body")
.get(0)
.click();

jsfiddle https://jsfiddle.net/jWAJ7/4549/