2013-03-28 123 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

感謝您的額外信息 - 我已經更新了包含它的答案。 –