2010-12-14 8 views
5

मेरे पास लगभग 3000 छवि यूआरएल की एक सूची है, जहां मुझे उन्हें अपने डेस्कटॉप पर डाउनलोड करने की आवश्यकता है।सी # का उपयोग कर 3000+ छवियां डाउनलोड करें?

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

क्या सोच रहा था कि क्या कोई और मुझे सभी छवि यूआरएल के माध्यम से लूपिंग और उन्हें फ़ोल्डर में डाउनलोड करने का अच्छा, त्वरित और मजबूत तरीका जानता था? किसी भी सुझाव के लिए खोलें, WinForms, बैच फ़ाइल हालांकि मैं दोनों में एक नौसिखिया हूँ।

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

उत्तर

11

पर प्रगति पट्टी जोड़ना चाहेंगे wget के बारे में क्या? यह फ़ाइल में निर्दिष्ट यूआरएल की एक सूची डाउनलोड कर सकते हैं।

wget -i c:\list-of-urls.txt 
+0

बहुत बढ़िया धन्यवाद, मैंने पहले इसका इस्तेमाल किया है लेकिन एक वेब पेज – leen3o

+3

प्राप्त करने के लिए यह शायद आपको प्रभावित नहीं करेगा, लेकिन जागरूक रहें कि जब डाउनलोड आकार 2 (या शायद 4) गीगाबाइट से अधिक हो जाता है तो wget के पुराने संस्करण स्कीफी हो जाते हैं। संस्करण से जुड़ा हुआ लगभग निश्चित रूप से इस मुद्दे को भुगतना होगा। http://users.ugent.be/~bpuype/wget/ अधिक अद्यतित है। – spender

+0

@ स्पेंडर: सीधे GnuWin32 प्रोजेक्ट पर अपडेट किया गया लिंक: http://gnuwin32.sourceforge.net/packages/wget.htm – Richard

11

एक सी # कमांड लाइन आवेदन लिखें (या Winforms, कि अगर आपकी झुकाव है), और फ़ाइलों को पुनः प्राप्त करने के लिए WebClient वर्ग का उपयोग करें।

यहाँ कुछ ट्यूटोरियल हैं:

C# WebClient Tutorial

Using WebClient to Download a File

या, just Google C# WebClient

आपको या तो सूची के माध्यम से डाउनलोड और लूप करने, प्रत्येक फ़ाइल के लिए अनुरोध जारी करने और परिणाम सहेजने, या इंडेक्स पेज के लिए अनुरोध जारी करने के लिए फ़ाइलों की एक सूची प्रदान करने की आवश्यकता होगी, इसे HTML Agility Pack जैसे कुछ का उपयोग करके पार्स करें सभी छवि टैग ढूंढें, और उसके बाद प्रत्येक छवि के लिए अनुरोध जारी करें, परिणाम को अपने स्थानीय ड्राइव पर कहीं सेव करें।

संपादित

तुम सिर्फ एक बार ही करना (के रूप में, नहीं एक आवेदन के हिस्से के रूप में), mbeckish's answer सबसे समझ में आता है चाहते हैं।

+7

निश्चित रूप से सबसे आसान। यदि आप कर सकते हैं, तो अपने डाउनलोड को तेज़ करने के लिए 'समानांतर। फॉरएच() 'का उपयोग करें। – roufamatic

+0

'समांतर। फॉरएच() 'स्वीट - मैंने पहले इसे नहीं देखा था। –

+0

मैंने कभी इसके बारे में कभी नहीं सुना है, मैं जा रहा हूं और अपने भविष्य के संदर्भ के लिए इसे देख रहा हूं :) धन्यवाद – leen3o

8

आप इस उद्देश्य के लिए अपना स्वयं का कार्यक्रम लिखने के बजाय ऑर्बिट जैसे मौजूदा डाउनलोड मैनेजर का उपयोग करना चाहेंगे। (निंदा, मुझे पता है)

मैं कक्षा के साथ बहुत खुश हूं। यह आपको टेक्स्ट फ़ाइल से डाउनलोड की एक सूची आयात करने देता है। यह कनेक्शन डाउनलोड करेगा, प्रत्येक डाउनलोड की गति बढ़ाने के लिए, प्रत्येक कनेक्शन के समानांतर में प्रत्येक फ़ाइल के हिस्सों को डाउनलोड करेगा। अगर कनेक्शन समय समाप्त हो जाता है, तो यह पुनः प्रयास करने का ख्याल रखेगा। ऐसा लगता है कि आपको इस तरह की सुविधाओं को खरोंच से बनाने के लिए बहुत सारे प्रयास करना होगा।

+1

लेकिन इसमें मजाक कहां है? +1 –

+0

मुझे पता है, मैं इस तरह का एक killjoy हूँ। :-) – StriplingWarrior

+0

टिप के लिए उत्कृष्ट धन्यवाद, पहले कक्षा के बारे में कभी नहीं सुना :) – leen3o

6

यदि यह सिर्फ एक बार की नौकरी है, तो एक आसान समाधान यूआरएल को इंगित करने वाले आईएमजी टैग के साथ एक HTML पृष्ठ लिखना होगा।

फिर फ़ायरफ़ॉक्स के साथ ब्राउज़ करें और सभी छवियों को फ़ोल्डर में सहेजने के लिए एक एक्सटेंशन का उपयोग करें।

+0

दुह। फ़ाइल | वेब पेज सहेजें (पूर्ण) ... –

+0

अच्छा विचार धन्यवाद :) मैं wget विचार का प्रयास करूंगा और बैकअप – leen3o

1

इस धारणा पर काम कर रहे है कि यह एक एक बंद एक बार परियोजना रन है और के रूप में आप अन्य प्रौद्योगिकियों के साथ एक नौसिखिया रहे हैं मैं निम्नलिखित सुझाव है:

बल्कि कोशिश करते हैं और एक वेब अनुरोध के सभी 3000 छवियों डाउनलोड से

कोई एक कार्य करें प्रति अनुरोध छवि। जब छवि डाउनलोड पूर्ण क्वेरी स्ट्रैप पैरामीटर के रूप में प्राप्त करने के लिए अगली छवि के यूआरएल को पास करने वाले एक ही पृष्ठ पर रीडायरेक्ट हो जाता है। उसको डाउनलोड करें और तब दोहराएं जब तक कि सभी छवियां डाउनलोड न हों।

मैं "उत्पादन" समाधान नहीं कहूंगा, लेकिन अगर मेरी धारणा सही है तो यह एक समाधान है जो आपको किसी भी समय चलने वाला नहीं होगा।

एक और आसान सरल समाधान एक साधारण सी # कंसोल एप्लिकेशन बनाना होगा जो प्रत्येक छवि को डाउनलोड करने के लिए वेब क्लाइंट का उपयोग करता है। निम्नलिखित छद्म कोड आपके पास पर्याप्त देना चाहिए जा रहा करने के लिए:

List<string> imageUrls = new List<string>(); 
imageUrls.Add(..... your urls from wherever .....) 

foreach(string imageUrl in imagesUrls) 
{ 
    using (WebClient client = new WebClient()) 
    { 
     byte[] raw = client.DownloadData(imageUrl); 

     .. write raw .. to file 
    } 
} 
+0

के रूप में इसका उपयोग करूंगा, आप उन छवियों पर लूपिंग के लिए समानांतर.फोरिएच() का उपयोग करने की संभावना रखते हैं। –

0

मुझे लगता है कि एक Excel स्प्रेडशीट में दिए गए यूआरएल के माध्यम से लूप और छवि फ़ाइलों को डाउनलोड करता है WinForms में एक समान एप्लिकेशन लिखा है। मुझे लगता है कि वेब समस्या के रूप में इसे लागू करने में आपको समस्या है कि सर्वर केवल आपके ब्राउज़र के समय से अनुरोध से पहले थोड़ी देर के लिए प्रक्रिया को चलाने की अनुमति देगा। आप या तो web.config फ़ाइल में इस समय बढ़ा सकते हैं (httpRuntime तत्व के निष्पादन टाइमआउट विशेषता को बदलें), या WinForms एप्लिकेशन के रूप में इस कार्यक्षमता को कार्यान्वित करें जहां लंबे निष्पादन समय कोई समस्या नहीं होगी। यदि यह एक फेंकने वाले एप्लिकेशन से अधिक है और आप WinForms मार्ग पर जाने का निर्णय लेते हैं, तो आप

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