gpt4 book ai didi

node.js - 将冗长的数据下载为 CSV 文件

转载 作者:太空宇宙 更新时间:2023-11-03 22:47:55 33 4
gpt4 key购买 nike

我需要将 View 中显示的表格内容下载为 CSV 文件。我有代码可以正确格式化表的内容,以便可以将其存储为 .csv 文件(例如,列分隔符是逗号,表的每个记录都在新行中)。

因此,在我的 Controller 中,我有以下代码:

window.location.href = '/download?data=' + encodeURIComponent($scope.csvString);

我正在使用 NodeJs 作为服务器部分。在这里,我有以下路由处理程序:

app.get('/download', function (req, res) {
var data = req.query.data;

res.attachment('data.csv');
res.setHeader('Content-Type', 'text/csv');
res.end(data);
});

这工作得很好。下载成功,下载文件中的数据是完美的 CSV 格式。没有问题。

当表中的记录太多,即数据量很大时,就会出现这个问题。因此,查询参数确实很大,我假设它超出了限制,因此 GET 请求返回 400(错误请求)错误 - 请注意,根据我的分析,请求永远不会到达服务器,而是我观察到使用 Chrome 开发者工具请求失败。在浏览器中,URL 就是 www.my_domain.com/download?data=the_lengthy_data。就是这样。网页为空白/空,未下载任何文件。

所以我想知道如何下载这么长的数据?我遇到的所有示例都执行 GET 请求,因此我必须将冗长的数据作为查询参数传递。还有其他方法吗?

最佳答案

这并不是您问题的真正答案,但从表面上看,您正在尝试“强制”下载客户端上生成的数据。那么在这种情况下,您可以创建一个数据 URI,其中直接包含数据。

你的 Angular JS 模板:

<a href="data:base64,{{btoa(csvString)}}" download>Download CSV</a>

您的 Controller :

$scope.btoa = function (val) {
return btoa(val);
};

因此,您的 DOM 应该如下所示:

<!-- The link contains data to the CSV string "a,b,c" -->
<a href="data:text/csv;base64,YSxiLGM=" download>Download CSV</a>

单击链接即可下载 CSV 文件。

编辑

您还可以使用名为 FileSaver.js 的库强制下载字符串。 .

像往常一样,您将获得 CSV,但这次,您将其转换为 BLOB。

var csvBlob = new Blob([$scope.csvString], { type: 'text/csv;charset=utf-8' });

然后,您可以调用 FileSaver.js 的 saveAs 函数。

saveAs(csvBlob, 'mydata.csv');

关于node.js - 将冗长的数据下载为 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18662404/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com