2013-03-28 84 views
7

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

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

我知道nodejs可以设置为发送一个CSV格式的文件,但它会很好地保持后端一个干净的JSON API。

+0

为什么在获取它之后,不仅仅是在客户端转换它?既然你使用的是Node,它将会是相同的代码,这样你可以保持你的API完全的JSON。另外,你究竟在问什么?将JSON转换为CSV,还是将数据转换为Angular中的下载按钮或两者兼而有之? –

+0

我在问如何从角度获取CSV格式的数据从客户端下载。我不太在意将其转换为CSV格式。我会在一秒内更新这个问题。 – GTDev

+0

这里有一个非常好的解决方案:http://stackoverflow.com/a/13903928/1804678 – Jess

回答

8

引用this post我已经抛出了如何可以这样做使用AngularJS一起快速演示:

JavaScript Demo (Plunker)

我包裹在一个服务引用的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生成的文件下载。
  • Base64编码的数据URI的大小是其二进制等效值的1/3倍。 (但是,如果 HTTP服务器使用gzip压缩响应,则此开销减少到2-3%)
  • 数据URI不像普通链接文件那样带有文件名。保存时,指定MIME类型的默认文件名是 。
  • [。 。 。 ]
+0

使用这种方法(客户端下载)的数据大小是有限的吗?我觉得是这样的。 – Jess

+0

看到这种方法的缺点:http://en.wikipedia.org/wiki/Data_URI_scheme#Disadvantages – Jess

+0

感谢您的额外信息 - 我已经更新了包含它的答案。 –