如果我们在 nodeJS 服务器上,我们可以编写一个标头,设置一个 mime 类型,然后发送它:
res.header("Content-Disposition", "attachment;filename="+name+".csv");
res.type("text/csv");
res.send(200, csvString);
并且由于标题,浏览器将为命名的 csv 文件创建下载。
当在浏览器中生成有用的数据时,将其保存在 CSV 文件中的一种解决方案是使用 ajax,将其上传到服务器,(也许可以选择将其保存在那里)并让服务器将其与这些标头一起发回,以成为一个csv 下载回浏览器。
但是,我想要一个 100% 浏览器解决方案,它不涉及与服务器的乒乓。
所以我想到可以打开一个新窗口并尝试使用 META 标记等效设置标题。
但这在最近的 Chrome 中对我不起作用。
我确实得到了一个新窗口,它包含 csvString,但不用作下载。
我想我希望在底部选项卡中下载或在底部选项卡中下载一个空白的新窗口。
我想知道元标记是否正确,或者是否还需要其他标记。
有没有办法在不将其推送到服务器的情况下进行这项工作?
用于在浏览器中创建 CSV 的 JsFiddle(不起作用 - 输出窗口但没有下载)
var A = [['n','sqrt(n)']]; // initialize array of rows with header row as 1st item
for(var j=1;j<10;++j){ A.push([j, Math.sqrt(j)]) }
var csvRows = [];
for(var i=0,l=A.length; i<l; ++i){
csvRows.push(A[i].join(',')); // unquoted CSV row
}
var csvString = csvRows.join("\n");
console.log(csvString);
var csvWin = window.open("","","");
csvWin.document.write('<meta name="content-type" content="text/csv">');
csvWin.document.write('<meta name="content-disposition" content="attachment; filename=data.csv"> ');
csvWin.document.write(csvString);