8

我使用 angularJS 前端框架和 nodejs/express 作为后端服务器来发送和接收 JSON。后端向前端发送了一个大的 JSON 对象,我想知道是否可以从前端以 CSV 格式下载 JSON 对象。

数据以 json 格式存储在范围变量中:$scope.data在角度控制器中。然后我在变量中将数据转换为 CSV 格式的字符串$scope.CSVdata。如何从客户端浏览器下载 CSV 数据?

我知道 nodejs 可以设置为以 CSV 格式发送文件,但最好让后端保持干净的 JSON api。

4

1 回答 1

9

参考这篇文章,我已经快速演示了如何使用 AngularJS 完成此操作:

JavaScript 演示(Plunker)

我已将引用的 Base64 代码包装在服务中,并按以下方式使用它:

$scope.downloadCSV = function() {
  var data = Base64.encode($scope.CSVData);
  window.location.href = "data:text/csv;base64," + data;
};

但是,如评论中所述,此方法有一些缺点。我已经从维基百科页面中提取了一些关于这个主题的要点。前往那里查看完整列表。

  • 数据 URI 不会与其包含的文档(例如 CSS 或 HTML 文件)分开缓存,因此每次重新下载包含的文档时都会下载编码数据。
  • Internet Explorer 8 将数据 URI 的最大长度限制为 32 KB。(Internet Explorer 9 没有这个限制)
  • 在 IE 8 和 9 中,数据 URI 只能用于图像,而不能用于导航或 JavaScript 生成的文件下载。 [7]
  • Base64 编码的数据 URI 的大小是其二进制等价物的 1/3 倍。(但是,如果 HTTP 服务器使用 gzip 压缩响应,则此开销会减少到 2–3%)
  • 数据 URI 不像普通链接文件那样携带文件名。保存时,通常使用指定 MIME 类型的默认文件名。
  • [ . . . ]
于 2013-03-28T19:32:20.513 回答