我使用angularJS前端框架和nodejs / express作为后端服务器来发送和接收JSON。后端向前端发送了一个大的JSON对象,我想知道是否可以从CSV格式的前端下载JSON对象。
数据以角度控制器中的范围变量$scope.data
存储为json。然后我将数据转换为变量$scope.CSVdata
中CSV格式的字符串。如何从客户端浏览器下载CSVdata?
我知道nodejs可以设置为以CSV格式发送文件,但保持后端干净的JSON api会很不错。
答案 0 :(得分:8)
引用this post我已经在一起快速演示如何使用AngularJS完成此任务:
我已将引用的Base64代码包装在服务中,并以下列方式使用它:
$scope.downloadCSV = function() {
var data = Base64.encode($scope.CSVData);
window.location.href = "data:text/csv;base64," + data;
};
此方法有are some disadvantages,但正如评论中所述。我已经从维基百科页面上提取了一些关于这个主题的要点。前往那里查看完整列表。
- 数据URI不会单独缓存其包含的文档(例如CSS或HTML文件),因此会下载编码数据 每次重新下载包含的文件。
- Internet Explorer 8将数据URI限制为最大长度32 KB。 (Internet Explorer 9没有此限制)
- 在IE 8和9中,数据URI只能用于图像,但不能用于导航或JavaScript生成的文件下载。[7]
- Base64编码数据URI的大小是其二进制等值的1/3。 (但是,如果这个开销减少到2-3% HTTP服务器使用gzip压缩响应)
- 数据URI不像普通链接文件那样携带文件名。保存时,指定MIME类型的默认文件名为 通常使用。
- [。 。 。 ]