2009-10-02 14 views
5

एक वेबरल से "टूलस्ट्रिप" i C# में एक छवि प्रदर्शित करने का प्रयास कर रहा हूं। निम्नलिखित methode का उपयोग कर रहा हूँ छविछवि एक वेब यूआरएल से सी # में लोड हो रही है

WebRequest requestPic5 = WebRequest.Create(icon_path); 
         requestPic5.Timeout = 5000; 
         WebResponse responsePic5 = null; 
         Image Myimg5 = null; 

if (requestPic5 != null) 
    { 
     responsePic5 = requestPic5.GetResponse(); 
     if (responsePic5 != null) 
     { 
      Myimg5 = Image.FromStream(responsePic5.GetResponseStream()); 
      } 
    } 
पाने के लिए

इसके असफल जब Myimg5 = Image.FromStream(responsePic5.GetResponseStream()); एक अपवाद फेंकता है लेकिन छवि अभी भी वहाँ यूआरएल में

लेकिन दुर्भाग्य से ज्यादातर समय अपने ठीक से लोड नहीं है और कभी कभी एक फेंक है 404 त्रुटि

+0

स्ट्रीम की कच्ची सामग्री कैसा दिखती है? क्या वे HTML या कुछ में सजाए गए हैं? –

+0

धन्यवाद जैकब, जिस डेटा को स्ट्रीम करने की आवश्यकता है वह एक पीएनजी छवि फ़ाइल है। – raki

+0

मैं सोच रहा था कि आप डीबग विंडो में स्ट्रीम आउटपुट कर सकते हैं और देख सकते हैं कि आपकी छवि बाइट्स के आसपास टैग थे या नहीं। लेकिन, मैंने अभी इसका परीक्षण किया और सब कुछ मेरे लिए ठीक काम किया। क्या आप सुनिश्चित हैं कि छवि आपके लिए वेबरेक्वेस्ट के माध्यम से उपलब्ध है? क्या आप इस छवि को आजमा सकते हैं? http://sstatic.net/so/img/logo.png (स्टैक ओवरफ्लो लोगो) और देखें कि चीजें कैसे काम करती हैं? –

उत्तर

6

प्रतिक्रिया स्ट्रीम में अन्य सामान हैं जिन्हें आप जरूरी नहीं चाहते हैं। आप वास्तव में सिर्फ इमेज फ़ाइल के कच्चे डेटा चाहते हैं, तो आप उपयोग कर सकते हैं:

new MemoryStream(new WebClient().DownloadData("http://address/file.ico"));

0

शायद वेबसाइट लोकप्रिय लिंकिंग के खिलाफ की रक्षा कर रहा है। चूंकि छवियां HTML पृष्ठों और वेबसाइटों की तुलना में आकार में बड़ी हैं, इसलिए उनकी उपयोग की गई बैंडविड्थ के लिए वेबसाइटें भुगतान करती हैं, यह अन्य वेबसाइटों द्वारा bsndwidth चोरी से वेबसाइटों की सुरक्षा के लिए एक तंत्र है।

विचार किसी प्रकार के प्रमाणीकरण का उपयोग कर रहा है और सुनिश्चित करें कि वास्तविक उपयोगकर्ता छवि के लिए पूछ रहा है। यह आमतौर पर उस पृष्ठ पर कुकीज़ द्वारा किया जाता है जिसमें छवि होती है। आपको उन कुकीज़ को प्राप्त करने और उन्हें आपके अनुरोध के साथ भेजने की आवश्यकता है। आपको अपने अनुरोध पर CookieContainer जोड़ने की आवश्यकता है, फिर छवि के पृष्ठ का अनुरोध करें और अंत में छवि को पुनर्प्राप्त करें (सभी चरणों के लिए एक ही अनुरोध का उपयोग करें, कुकीज़ को जोड़ा जाएगा और स्वचालित रूप से उपयोग किया जाएगा)।

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