2013-03-28 8 views
7

के रूप में क्लाइंट साइड जेसन डाउनलोड करें मैं जेएसओएन भेजने और प्राप्त करने के लिए बैकएंड सर्वर के रूप में कोणीय जेएस फ्रंटेंड फ्रेमवर्क और नोडजेस/एक्सप्रेस का उपयोग कर रहा हूं। बैकएंड ने एक बड़ी JSON ऑब्जेक्ट को फ्रंटेंड पर भेजा और मैं सोच रहा था कि क्या मैं CSV प्रारूप में अग्रभाग से जेएसओएन ऑब्जेक्ट डाउनलोड कर सकता हूं।सीएसवी

डेटा को एक स्कोप वैरिएबल में जेसन के रूप में संग्रहीत किया जाता है: $scope.data एक कोणीय नियंत्रक में। फिर मैंने डेटा को $scope.CSVdata में CSV प्रारूप में एक स्ट्रिंग में परिवर्तित कर दिया। मैं क्लाइंट ब्राउज़र से डाउनलोड करने के लिए CSVdata कैसे प्राप्त करूं?

मुझे पता है कि सीडीवी प्रारूप में फ़ाइल भेजने के लिए नोडजेस स्थापित किए जा सकते हैं लेकिन बैकएंड को एक साफ JSON api रखना अच्छा लगेगा।

+0

आप इसे प्राप्त करने के बाद क्लाइंट पक्ष पर इसे क्यों परिवर्तित नहीं करते हैं? चूंकि आप नोड का उपयोग कर रहे हैं, वैसे भी वही कोड होगा, और इस तरह आप अपना एपीआई पूरी तरह से JSON रख सकते हैं। इसके अलावा, आप वास्तव में क्या पूछ रहे हैं? JSON को CSV में कनवर्ट करना, या डेटा को कोणीय में डाउनलोड बटन पर प्राप्त करना, या दोनों? –

+0

मैं पूछ रहा हूं कि क्लाइंट से डाउनलोड करने के लिए कोणीय से सीएसवी प्रारूप में डेटा कैसे प्राप्त करें। मैं इसे सीएसवी प्रारूप में परिवर्तित करने के बारे में कम चिंतित हूं। मैं एक सेकंड में सवाल अपडेट करूंगा। – 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 इस विधि टिप्पणी में उल्लेख किया है तथापि के रूप में करने के लिए। मैंने इस विषय पर विकिपीडिया पेज से कुछ बुलेट पॉइंट निकाले हैं। पूरी सूची के लिए वहां पर सिर।

  • डाटा यूआरआई अलग, उनके युक्त दस्तावेज़ (उदा सीएसएस या HTML फ़ाइलों) से कैश नहीं कर रहे हैं इसलिए इनकोडिंग डेटा हर बार वाले दस्तावेज़ों कर रहे हैं फिर से डाउनलोड किया डाउनलोड किया जाता है।
  • इंटरनेट एक्सप्लोरर 8 डेटा यूआरआई को अधिकतम 32 केबी तक सीमित करता है। (इंटरनेट एक्सप्लोरर 9 में यह सीमा नहीं है)
  • आईई 8 और 9 में, डेटा यूआरआई केवल छवियों के लिए उपयोग किया जा सकता है, लेकिन नेविगेशन या जावास्क्रिप्ट जेनरेट फ़ाइल डाउनलोड के लिए नहीं। [7]
  • बेस 64-एन्कोडेड डेटा यूआरआई अपने बाइनरी समकक्ष की तुलना में आकार में 1/3 गुना बड़ा है। (हालांकि, HTTP सर्वर gzip का उपयोग कर प्रतिक्रिया को संपीड़ित करता है, तो यह ओवरहेड 2-3% तक कम हो जाता है)
  • डेटा यूआरआई में एक सामान्य फ़ाइल के रूप में फ़ाइल नाम नहीं होता है। सहेजते समय, निर्दिष्ट MIME प्रकार के लिए एक डिफ़ॉल्ट फ़ाइल नाम आमतौर पर उपयोग किया जाता है।
  • [। । । ]
+0

इस दृष्टिकोण का उपयोग (क्लाइंट साइड डाउनलोड) डेटा आकार सीमित है? मुझे लगता है ऐसा है। – Jess

+0

इस दृष्टिकोण के नुकसान देखें: http://en.wikipedia.org/wiki/Data_URI_scheme#Disadvantages – Jess

+0

अतिरिक्त जानकारी के लिए धन्यवाद - मैंने इसे शामिल करने के लिए उत्तर अपडेट किया है। –