दिलचस्प पोस्ट
FragmentPagerAdapter का समर्थन पुराने टुकड़े के लिए संदर्भ रखता है क्या उद्देश्य / सी में हां / नहीं, सही / गलत और सही / गलत है? आईफोन ओएस 4.0 में ब्लॉक-आधारित एनीमेशन मैनेजमेंट क्या हैं? कैसे mysql में levenshtein समारोह जोड़ने के लिए? टास्क। स्टार्ट (), टास्क.रन () और टास्क। फ़ैक्टर। स्टार्टन्यू () का उपयोग करने के बारे में स्लाइडर से पहले और बाद में अलग-अलग रंग के लिए एचटीएमएल 5 रेंज इनपुट कैसे करें? एक पेड़ में एक फ्लैट तालिका को पार्स करने के लिए सबसे कुशल / सुरुचिपूर्ण तरीका क्या है? एसक्यूएलइट में उद्देश्य सी के साथ एक datetime कॉलम कैसे प्राप्त करें MySQL में अगले ऑटो-इनेरमेंट आईडी कैसे प्राप्त करें I क्या एक कंपाइलर बग है जो कि एक is_complete प्रकार के गुण के कार्यान्वयन से उत्पन्न हुआ है? जावास्क्रिप्ट कोड jsfiddle में काम करता है, लेकिन ब्राउज़र में नहीं AngularJS में एक निर्देश से मूल नियंत्रक की कॉलिंग विधि KeyListener, कुंजी कुंजी बनाम कुंजी टाइप क्या गोटो अभी भी हानिकारक माना जाता है? अपरिवर्तनीय बनाम परिवर्तन योग्य प्रकार

.NET / C # में साइट से छवि डाउनलोड करें

मैं साइट से छवियों को डाउनलोड करने की कोशिश कर रहा हूं जो कोड मैं उपयोग कर रहा हूं वह ठीक काम कर रहा है, जबकि छवि उपलब्ध है। यदि यह चित्र उपलब्ध नहीं है, तो यह समस्या पैदा कर रहा है। छवि की उपलब्धता को कैसे मान्य करें?

कोड:

विधि 1:

WebRequest requestPic = WebRequest.Create(imageUrl); WebResponse responsePic = requestPic.GetResponse(); Image webImage = Image.FromStream(responsePic.GetResponseStream()); // Error webImage.Save("D:\\Images\\Book\\" + fileName + ".jpg"); 

विधि 2:

 WebClient client = new WebClient(); Stream stream = client.OpenRead(imageUrl); bitmap = new Bitmap(stream); // Error : Parameter is not valid. stream.Flush(); stream.Close(); client.dispose(); if (bitmap != null) { bitmap.Save("D:\\Images\\" + fileName + ".jpg"); } 

संपादित करें:

स्ट्रीम में निम्नलिखित कथन हैं:

  Length '((System.Net.ConnectStream)(str)).Length' threw an exception of type 'System.NotSupportedException' long {System.NotSupportedException} Position '((System.Net.ConnectStream)(str)).Position' threw an exception of type 'System.NotSupportedException' long {System.NotSupportedException} ReadTimeout 300000 int WriteTimeout 300000 int 

वेब के समाधान से एकत्रित समाधान ".NET / C # में साइट से छवि डाउनलोड करें"

किसी भी छवि वर्ग को शामिल करने की कोई आवश्यकता नहीं है, आप केवल WebClient.DownloadFile कॉल कर सकते हैं। WebClient.DownloadFile :

 string localFilename = @"c:\localpath\tofile.jpg"; using(WebClient client = new WebClient()) { client.DownloadFile("http://img.hiwab.com/c%23/image.jpg", localFilename); } 

अद्यतन करें
चूंकि आप यह जांचना चाहेंगे कि फाइल मौजूद है या नहीं, अगर फ़ाइल है, तो यह उसी अनुरोध के भीतर करना बेहतर है। तो यहाँ एक ऐसा तरीका है जो ऐसा करेगा:

 private static void DownloadRemoteImageFile(string uri, string fileName) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Check that the remote file was found. The ContentType // check is performed since a request for a non-existent // image file might be redirected to a 404-page, which would // yield the StatusCode "OK", even though the image was not // found. if ((response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Moved || response.StatusCode == HttpStatusCode.Redirect) && response.ContentType.StartsWith("image",StringComparison.OrdinalIgnoreCase)) { // if the remote file was found, download oit using (Stream inputStream = response.GetResponseStream()) using (Stream outputStream = File.OpenWrite(fileName)) { byte[] buffer = new byte[4096]; int bytesRead; do { bytesRead = inputStream.Read(buffer, 0, buffer.Length); outputStream.Write(buffer, 0, bytesRead); } while (bytesRead != 0); } } } 

संक्षेप में, यह फ़ाइल के लिए अनुरोध करता है, यह पुष्टि करता है कि प्रतिक्रिया कोड OK , Moved या Redirect और यह भी कि ContentType एक छवि है। अगर ये शर्तें सही हैं, तो फाइल डाउनलोड हो जाएगी।

मैंने कुछ मामूली संशोधनों के साथ एक परियोजना में ऊपर दिए गए फ्रेडरिक का कोड का उपयोग किया है, सोचा कि मैं इसे साझा करता हूं:

 private static bool DownloadRemoteImageFile(string uri, string fileName) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); HttpWebResponse response; try { response = (HttpWebResponse)request.GetResponse(); } catch (Exception) { return false; } // Check that the remote file was found. The ContentType // check is performed since a request for a non-existent // image file might be redirected to a 404-page, which would // yield the StatusCode "OK", even though the image was not // found. if ((response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Moved || response.StatusCode == HttpStatusCode.Redirect) && response.ContentType.StartsWith("image", StringComparison.OrdinalIgnoreCase)) { // if the remote file was found, download it using (Stream inputStream = response.GetResponseStream()) using (Stream outputStream = File.OpenWrite(fileName)) { byte[] buffer = new byte[4096]; int bytesRead; do { bytesRead = inputStream.Read(buffer, 0, buffer.Length); outputStream.Write(buffer, 0, bytesRead); } while (bytesRead != 0); } return true; } else return false; } 

मुख्य बदलाव हैं:

  • GetResponse () के लिए एक प्रयास / पकड़ का उपयोग करते हुए मैं एक अपवाद में चल रहा था जब रिमोट फाइल 404 में लौट आई थी
  • एक बुलियन लौट रहा है

DownloadData विधि का भी उपयोग करना संभव है

  private byte[] GetImage(string iconPath) { using (WebClient client = new WebClient()) { byte[] pic = client.DownloadData(iconPath); //string checkPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) +@"\1.png"; //File.WriteAllBytes(checkPath, pic); return pic; } } 
  private static void DownloadRemoteImageFile(string uri, string fileName) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); if ((response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Moved || response.StatusCode == HttpStatusCode.Redirect) && response.ContentType.StartsWith("image", StringComparison.OrdinalIgnoreCase)) { using (Stream inputStream = response.GetResponseStream()) using (Stream outputStream = File.OpenWrite(fileName)) { byte[] buffer = new byte[4096]; int bytesRead; do { bytesRead = inputStream.Read(buffer, 0, buffer.Length); outputStream.Write(buffer, 0, bytesRead); } while (bytesRead != 0); } } }