2016-03-18 10 views
22

मैं एक ब्लॉब में एक आरईएसटी प्रतिक्रिया की प्रतिलिपि बनाना चाहता हूं लेकिन मैं कुछ करने में असमर्थ हूं क्योंकि blob() और arrayBuffer() अभी तक प्रतिक्रिया ऑब्जेक्ट में लागू नहीं किया गया है। प्रतिक्रिया शरीर एक निजी चर है।मैं स्ट्रिंग या जेसन में परिवर्तित किए बिना कोणीय 2 http प्रतिक्रिया निकाय तक पहुंच कैसे प्राप्त कर सकता हूं?

... 
return this.http.get(url, {params: params, headers: headers}) 
    .map(res => { 
     // can't access _body because it is private 
     // no method appears to exist to get to the _body without modification    
     new Blob([res._body], {type: res.headers.get('Content-Type')}); 
    }) 
    .catch(this.log); 
... 

क्या कोई समाधान है जिसका उपयोग मैं इन विधियों को लागू होने तक कर सकता हूं?

उत्तर

46

एक स्ट्रिंग जो मैं कहीं भी दस्तावेज नहीं देखा है के रूप में शरीर तक पहुँचने के लिए एक बहुत सरल समाधान नहीं है:

let body = res.text() 
+3

वाह! यह समाधान वास्तव में मेरे टीएस को संकलित करने के लिए एनपीएम को भी अनुमति देता है! आपको यह कहां मिला? –

+1

वहां बहुत सारे परीक्षण और त्रुटि शामिल थी इसलिए मुझे वास्तव में याद नहीं आया कि मुझे डर है। – StudioLE

1

मेरे पास कोई अन्य समाधान नहीं देख सकते हैं करने से पहले निम्न पीआर विलय कर दिया है:

जबकि आप एक संकलन त्रुटि है, क्षेत्र कार्यावधि में इस्तेमाल किया जा सकता ...

6

चूंकि मुझे एक ही समस्या में चलते समय यह प्रश्न मिला (और कोणीय के दस्तावेज़ीकरण को आज के रूप में अपडेट नहीं किया गया है) अब आप इसका उपयोग कर सकते हैं:

let blob = new Blob([response.arrayBuffer()], { type: contentType }); 

एक और वैकल्पिक हल अगर किसी कारण से आप कोणीय 2 के एक पुराने संस्करण पर कर रहे हैं:

let blob = new Blob([(<any> response)._body], { type: contentType }); 
2

प्रतिक्रिया सेट अप अनुरोधों का प्रकार सेट करें। इससे प्रतिक्रिया होगी .ब्लोब() विधि कार्य।

 let headers = this.getAuthorizationHeader(); 
    headers.append("Accept", "application/octet-stream"); 
    return this.http 
     .get(url, new RequestOptions({ headers: headers, responseType: ResponseContentType.Blob })) 
     .map((res: Response): Blob => { 
      return res.ok ? res.blob() : undefined; 
     }) 
+0

नई सुविधाओं पर अधिक जानकारी: http://restlet.com/company/blog/2016/08/29/whats-new-in-the-http- मॉड्यूल-of-angular-2/, सदस्यता लेने के लिए मत भूलना परिणाम का उपयोग करने के लिए – bleuscyther

8

@StudioLE में जोड़ें। आप जेसन के रूप में डेटा वापस करने के लिए जेसन() विधि का उपयोग कर सकते हैं।

let body = res.json() 
+1

यह बिल्कुल उपयोग किया जाना चाहिए। आपकी 'त्रुटि' प्रतिक्रिया पर, आप 'error.json()' कर सकते हैं और API से वास्तव में लौटाया गया डेटा टेम्पलेट में उपलब्ध होगा। – Rexford

+0

डांगिट, मैं इस जवाब के लिए '.json()' lol धन्यवाद का उपयोग करना भूल गया था सौभाग्य से मैं केवल कुछ मिनट के लिए अपने सिर को टक्कर लगी थी। –

संबंधित मुद्दे