c# - Anyone have sample code for doing a "chunked" HTTP streaming download of one web directly to a upload to a separate web server? -
पृष्ठभूमि - मैं एक मौजूदा वेबपेज को एक अलग वेब अनुप्रयोग में स्ट्रीम करने का प्रयास कर रहा हूं, एचटीटीपी वेबबेट / HttpWebResponse सी # में एक मुद्दा मैं हड़ताली हूं कि मैं फ़ाइल अपलोड की सामग्री-लंबाई फ़ाइल अपलोड की सामग्री-लंबाई का उपयोग करते समय फ़ाइल अपलोड सेट करने का प्रयास कर रहा हूं, लेकिन जब ऐसा लगता है कि स्रोत वेबपेज वेबसर्वर पर है, जिसके लिए एचटीटीपी वेब रिस्पांस नहीं करता है सामग्री लंबाई प्रदान करें।
एचटीटीपी वेबबर्वर डाउनलोडर्यूज = वेबआरइक्वैस्ट। बनाएं (नया यूरी ("डाउनलोडर")) के रूप में एचटीटीपी वेबबेट; (HttpWebResponse downloadResponse = downloadRequest.GetResponse () के रूप में HttpWebResponse) (var uploadRequest = (HttpWebRequest) WebRequest.Create (नया उरी ("यूरिफाथ")) का उपयोग कर रहा है; UploadRequest.method = "पोस्ट"; UploadRequest.ContentLength = downloadResponse.ContentLength; // ####
प्रश्न : इस मामले को पूरा करने के लिए मैं इस दृष्टिकोण को कैसे अपडेट कर सकता हूं (जब डाउनलोड प्रतिक्रिया में कोई सामग्री-लंबाई नहीं है सेट)। क्या यह किसी तरह मेमोरीस्ट्रीम का प्रयोग हो सकता है? किसी भी नमूना कोड की सराहना की जाएगी। विशेष रूप से कोई ऐसा कोड नमूना होता है जिसमें कोई दिखाता है कि "चंकेड" HTTP डाउनलोड और amp; स्रोत वेब सर्वर सामग्री के लम्बाई प्रदान नहीं करने वाले किसी भी मुद्दे से बचने के लिए अपलोड करें?
धन्यवाद
जैसा कि मैंने पहले से ही माइक्रोसॉफ्ट फ़ोरम में आवेदन किया है, आपके पास कुछ विकल्प हैं जो आपके पास हैं।
हालांकि, यह मैं इसके अलावा, ध्यान रखें कि आपको वास्तव में MemoryStream :
HttpWebRequest downloadRequest = WebRequest.Create (नई URI ("डाउनलोड")) HttpWebRequest के रूप में; बाइट [] बफर = नया बाइट [4096]; (HttpWebResponse) के रूप में (मेमोरीस्ट्रीम एमएस = नया मेमोरीस्ट्रीम ()) का उपयोग करते हुए (एचटीटीपी वेबबेशेंस डाउनलोडरेशंस = डाउनलोडर्यूएफ़। गेट रेस्पॉन्स (HttpWebResponse)) {स्ट्रीम रिलीस्ट = डाउनलोडरेशन्स। गेटरेस्पॉन्सस्ट्रीम (); Int read = respStream.Read (बफर, 0, बफर। लैंग); जबकि (पढ़ें & gt; 0) {ms.Write (बफर, 0, पढ़ा); Read = respstream.Read (बफर, 0, बफर। लैंग); } // स्ट्रीम बाइट का डेटा प्राप्त करें [] अपलोडडेटा = एमएस.ToArray (); Var अपलोडरक्वैस्ट = (एचटीटीपी वेबबर्ब) वेबआरक्वेंस्ट। (नया उरी ("यूरिपाथ")); UploadRequest.method = "पोस्ट"; UploadRequest.ContentLength = uploadData.Length; // आप जानते हैं कि इसके बाद क्या करना है ....}
ContentLength
के लिए मूल्य जानने के बारे में चिंता करने की आवश्यकता नहीं है संभवतः। जैसा कि आपने अनुमान लगाया है, आप SendChunked
को true
पर uploadRequest
सेट कर सकते हैं, और फिर डाउनलोड स्ट्रीम से अपलोड स्ट्रीम में कॉपी कर सकते हैं। या, आप केवल चुने गए
को निर्धारित किए बिना कॉपी कर सकते हैं, और एचटीटीपी वेबबेट
(जहाँ तक मुझे पता है) आंतरिक रूप से डेटा बफर करेगा (सुनिश्चित करें कि AllowWriteStreamBuffering
को सच
पर uploadrequest
पर सेट किया गया है) और सामग्री की लंबाई निर्धारित करें और अनुरोध भेजें।
Comments
Post a Comment