如果我们在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,但不起下载的作用。
我想我希望在底部标签中获得下载,或者在底部标签中获得下载的空白新窗口。
我想知道meta标签是否正确,或者是否还需要其他标签。
有没有一种方法可以在不将其传递到服务器的情况下使其工作?
JsFiddle for Creating a CSV in the Browser (not working - outputs window but no download)
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);
发布于 2014-12-30 10:51:37
@adeneo answer适用于Firefox和chrome...对于IE,可以使用以下内容。
if (window.navigator.msSaveOrOpenBlob) {
var blob = new Blob([decodeURIComponent(encodeURI(result.data))], {
type: "text/csv;charset=utf-8;"
});
navigator.msSaveBlob(blob, 'FileName.csv');
}
发布于 2014-07-14 11:28:28
请看adeneo的答案,但不要忘记encodeURIComponent
!
a.href = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csvString);
另外,我需要使用"\r\n“而不仅仅是"\n”作为行分隔符。
var csvString = csvRows.join("\r\n");
发布于 2015-01-04 08:39:28
一旦我将JS代码打包到一个很小的库中:
https://github.com/AlexLibs/client-side-csv-generator
Github上提供了代码、文档和演示/游乐场。
享受:)
欢迎拉取请求。
https://stackoverflow.com/questions/17836273
复制相似问题