2008-10-10 13 views
17

में मौजूद है या नहीं, मैं साइटस्कोप के लिए एक निदान पृष्ठ लिख रहा हूं और एक क्षेत्र जिसे हमें परीक्षण करने की आवश्यकता है, यह है कि फ़ाइल/मीडिया संपत्तियों का कनेक्शन वेब सर्वर से एक्सेसिबल है। एक तरीका मुझे लगता है कि मैं ऐसा कर सकता हूं, यह छवि को पीछे कोड के माध्यम से लोड करता है और यह देखने के लिए परीक्षण करता है कि आईआईएस स्टेटस संदेश 200 है या नहीं।यह देखने के लिए परीक्षण करें कि कोई छवि C#

तो मूल रूप से मुझे साइट के भीतर इस तरह के फ़ोल्डर में नेविगेट करने में सक्षम होना चाहिए:/मीडिया/1/image.jpg और देखें कि क्या यह 200 लौटाता है ... अगर अपवाद नहीं फेंकता है।

मैं यह पता लगाने की कैसे इस कोड को लिखने के लिए संघर्ष कर रहा हूँ।

किसी भी मदद की बहुत सराहना की जाती है।

धन्यवाद

+0

क्या होगा यदि मैं 'http: // localhost/मुखपृष्ठ' जैसे यूआरएल के साथ एक पेज का परीक्षण करना चाहता हूं और देख सकता हूं कि इस पृष्ठ में कोई गायब छवि है या नहीं? मेरा प्रारंभिक विचार 'HttpWebRequest' का उपयोग करके पृष्ठ को पढ़ना है, प्रत्येक तत्व के लिए प्रतिक्रिया प्राप्त करें, फिर सामग्री को देखें, एक और अनुरोध करें। कोई अलग विचार? –

उत्तर

42

बस HEAD का उपयोग करें। अगर आपको इसकी आवश्यकता नहीं है तो पूरी छवि को डाउनलोड करने की आवश्यकता नहीं है। यहां कुछ बॉयलरप्लेट कोड।

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("url"); 
request.Method = "HEAD"; 

bool exists; 
try 
{ 
    request.GetResponse(); 
    exists = true; 
} 
catch 
{ 
    exists = false; 
} 
+0

यह पूरी तरह से काम किया, धन्यवाद। – RedWolves

+0

क्या यह विधि फ़ोल्डर में लागू हो सकती है यदि वे मौजूद हैं या नहीं? –

+2

@ जेएल, क्या फ़ोल्डर्स? फाइल सिस्टम ?? – Kiquenet

-1

मैं एक HttpWebRequest में बजाय देखो चाहते हैं - मैं पिछले जवाब वास्तव में, डेटा डाउनलोड करेगा जबकि आप HttpWebRequest से डेटा के बिना प्रतिक्रिया प्राप्त करने में सक्षम होना चाहिए लगता है।

http://msdn.microsoft.com/en-us/library/456dfw4f.aspx चरण # 4 तक चाल चलाना चाहिए। वहाँ संख्यात्मक कोड हो रही है, तो जरूरत है हो सकता है के लिए HttpWebResponse पर अन्य क्षेत्रों ...

hth जैक

+0

केवल एक चीज है इसे डाउनलोड जाएगा प्रतिक्रिया हेडर, जो परिभाषा से है "प्रतिक्रिया" –

5

मैंने पहले कुछ इस तरह का उपयोग किया है रहे हैं, लेकिन वहाँ शायद एक बेहतर तरीका है:

try 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://somewhere/picture.jpg"); 
    request.Credentials = System.Net.CredentialCache.DefaultCredentials; 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    myImg.ImageUrl = "http://somewhere/picture.jpg"; 
} 
catch (Exception ex) 
{ 
    // image doesn't exist, set to default picture 
    myImg.ImageUrl = "http://somewhere/default.jpg"; 
} 
14

आप यह भी जांचना चाहेंगे कि आपको एक ओके स्टेटस कोड (यानी HTTP 200) मिला है और प्रतिक्रिया ऑब्जेक्ट से माइम प्रकार आप जो उम्मीद कर रहे हैं उससे मेल खाता है। आप का विस्तार कर सकता है कि की तर्ज पर,

public bool doesImageExistRemotely(string uriToImage, string mimeType) 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uriToImage); 
    request.Method = "HEAD"; 

    try 
    { 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

     if (response.StatusCode == HttpStatusCode.OK && response.ContentType == mimeType) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
    catch 
    { 
     return false; 
    } 
} 
+1

मैं जोड़ने के लिए है कि अगर आप अनुरोध HttpWebResponse के चारों ओर एक कथन का उपयोग जोड़ने ... आप सुनिश्चित करें कि आपके एप्लिकेशन तीन के बाद लटका नहीं होगा कर देगा चाहते हैं लगातार अनुरोध यह परिदृश्य तब आ सकता है जब पृष्ठभूमिवर्कर का उपयोग किया जाता है। का उपयोग कर (HttpWebResponse प्रतिक्रिया = (HttpWebResponse) request.GetResponse()) {// तर्क यहां आता है} – asuciu

+0

इसके अलावा अगर आप किसी भी ProtocolError मिल (दूरस्थ सर्वर ने एक त्रुटि दी:। (500) आंतरिक सर्वर त्रुटि) परिवर्तन: request.Method = "GET"; – asuciu

+1

छवि के लिए माइम टाइप निर्दिष्ट करने के लिए क्या है? – Shimmy

4

आप HttpWebResponse वस्तु के निपटान के लिए है, अन्यथा आप मुद्दों होगा के रूप में मैं पड़ा है ...

public bool DoesImageExistRemotely(string uriToImage) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uriToImage); 

      request.Method = "HEAD"; 

      try 
      { 
       using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
       { 

        if (response.StatusCode == HttpStatusCode.OK) 
        { 
         return true; 
        } 
        else 
        { 
         return false; 
        } 
       } 
      } 
      catch (WebException) { return false; } 
      catch 
      { 
       return false; 
      } 
    } 
+0

आपके पास क्या समस्याएं थीं? –

+0

क्या मुद्दे, श्रीमान? – Kiquenet

+0

@ किकनेट मुझे लगता है, मेमोरी की कमी के मामले – VMAtm

1

आप एक अपवाद मिल रहे हैं ,

यह निम्न पंक्ति

request.Credentials = new NetworkCredential(username, password); 
जोड़कर हल किया जा सकता: की तरह अनुरोध के दौरान "(401) अनधिकृत। दूरस्थ सर्वर ने एक त्रुटि दी"

प्रश्न और उत्तर check if image exists on intranet से इस प्रश्न में जोड़ा गया।

1

यदि यूआरएल http: \ server.myImageSite.com जैसा मौजूद है तो उत्तर भी गलत है केवल छवि आकार> 0 सत्य है।

public static void GetPictureSize(string url, ref float width, ref float height, ref string err) 
    { 
    System.Net.HttpWebRequest wreq; 
    System.Net.HttpWebResponse wresp; 
    System.IO.Stream mystream; 
    System.Drawing.Bitmap bmp; 

    bmp = null; 
    mystream = null; 
    wresp = null; 
    try 
    { 
     wreq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url); 
     wreq.AllowWriteStreamBuffering = true; 

     wresp = (HttpWebResponse)wreq.GetResponse(); 

     if ((mystream = wresp.GetResponseStream()) != null) 
      bmp = new System.Drawing.Bitmap(mystream); 
    } 
    catch (Exception er) 
    { 
     err = er.Message; 
     return; 
    } 
    finally 
    { 
     if (mystream != null) 
      mystream.Close(); 

     if (wresp != null) 
      wresp.Close(); 
    } 
    width = bmp.Width; 
    height = bmp.Height; 
} 

public static bool ImageUrlExists(string url) 
{ 

    float width = 0; 
    float height = 0; 
    string err = null; 
    GetPictureSize(url, ref width, ref height, ref err); 
    return width > 0; 
} 
संबंधित मुद्दे