मुझे एक webservice कॉल करना है जो मुझे एक बाइनरी फ़ाइल की सामग्री देता है। मैं तो बस वापस मेरे नियंत्रक के फोन करने वाले को एक ही सामग्री देना चाहता हूँ:प्ले: बाइनरी webservice प्रतिक्रिया
val blobPromise = WS.url("http://url/to/webservice/file.txt").get()
Async {
blobPromise.map(f => Ok(f.body))
}
यह पाठ फ़ाइलों के लिए काम करता है, लेकिन द्विआधारी फ़ाइलें दूषित हो जाएगी। मैं यहाँ क्या गलत कर रहा हूँ? (शायद यह f.body
कि एक स्ट्रिंग के लिए वेब सेवा से द्विआधारी परिणाम encodes है लेकिन मैं कच्चे डेटा कैसे मिल सकता है??)
मुझे पता है, यह बड़ी फ़ाइलों के लिए एक अच्छा तरीका नहीं है - मैं प्ले डॉक्स में पढ़ा है लगभग Streaming HTTP responses, लेकिन यह मेरे लिए प्ले फ्रेमवर्क के साथ शुरुआत के रूप में जटिल लगता है।
बाइनरी डेटा के साथ अब 'f.ahcResponse.getResponseBodyAsBytes' के साथ दोनों समाधानों का बहुत धन्यवाद। स्ट्रीमिंग कार्यक्षमता मैंने सोचा है की तुलना में आसान लगता है ... :-) – Sonson123
क्या यह ब्लॉक नहीं करता है? इनपुटस्ट्रीम आमतौर पर करते हैं .... –
असल में यह तब से अवरुद्ध नहीं होता जब आप इसे पढ़ते हैं ... लेकिन केवल इसलिए कि यह सब स्मृति में पहले पढ़ा जाता है। इससे बचने के लिए, आपको 'get()' के ओवरलोडेड फॉर्म का उपयोग करना होगा जो उपभोक्ता फ़ंक्शन तर्क लेता है: '[ए] प्राप्त करें (उपभोक्ता: (प्रतिक्रिया हेडर) ⇒ Iteratee [ऐरे [बाइट], ए]) ' –