2009-10-31 6 views
7

में प्रबंधक डाउनलोड करें मुझे जावा से एफ़टीपी/HTTP के माध्यम से कई बड़ी फाइलों (कई गिग) की आवश्यकता है। डाउनलोड की सुविधा के लिए क्या एक तैयार पुस्तकालय (जावा/कमांड लाइन उपकरण) है? कुछ स्पष्ट आवश्यकताएँ हैं:जावा

  1. मल्टी कनेक्शन डाउनलोड - सर्वर से कई कनेक्शन को खोलने के लिए डाउनलोड (जैसे फ्लैशगेट/GetRight/...)
  2. फिर से शुरू में तेजी लाने के लिए सक्षम होना चाहिए एक डाउनलोड

संपादित करें - मैं वास्तव में ऐसी लाइब्रेरी नहीं लिखना चाहता हूं लेकिन मौजूदा परीक्षण, उत्पादन ग्रेड लाइब्रेरी के लिए इसे चोरी (या भुगतान) करना चाहता हूं। rsynch प्रासंगिक नहीं है क्योंकि मुझे HTTP और FTP साइटों से फ़ाइलों को डाउनलोड करने की आवश्यकता है, यह आंतरिक फ़ाइल स्थानांतरण के लिए नहीं है।

उत्तर

2

HTTP प्रोटोकॉल ऑफसेट पर आंशिक डाउनलोड शुरू करने का समर्थन करता है, लेकिन यह सुनिश्चित करने के लिए फ़ाइल के स्थानीय आंशिक संस्करण को सत्यापित करने के लिए सीमित समर्थन है कि इसमें अंत (या कुछ समान) से जुड़ा जुड़ाव नहीं है। यदि आपका पर्यावरण इसे अनुमति देता है, तो मैं --partial विकल्प के साथ rsync की अनुशंसा करता हूं। यह कमांड लाइन से इस तरह की कार्यक्षमता का समर्थन करने के लिए डिज़ाइन किया गया है।

यदि आप rsync का उपयोग नहीं कर सकते हैं, तो आप कॉमन्स-HTTP क्लाइंट के साथ काम करने और प्रबंधित आकार वाले हिस्सों को डाउनलोड करने के लिए रेंज HTTP शीर्षलेख का उपयोग करने का प्रयास करना चाह सकते हैं।

2

यदि आप जावा में सॉकेट और धागे बनाने के बारे में जानते हैं तो यह मुश्किल नहीं है।

पहले एक अनुरोध बनाएं और Content-length शीर्षलेख प्राप्त करने के लिए शीर्षलेख पढ़ें। फिर उदाहरण के लिए प्रत्येक अनुरोध के उदाहरण के लिए अपने अनुरोध को विभाजित करने की रणनीति तैयार करें। फिर प्रत्येक अनुरोध के लिए थ्रेड का उपयोग करके 10 अनुरोधों को शुरू करें। प्रत्येक अनुरोध में आपको Range शीर्षलेख को परिभाषित करना होगा।

आपके डाउनलोड को फिर से शुरू करना उन श्रेणियों को संग्रहीत करने का विषय है जिन्हें आपने अभी तक डाउनलोड नहीं किया है। मेरा सुझाव है कि आप इस HTTP/1.1 शीर्षलेख फ़ील्ड आरएफसी here पढ़ लें यदि आप वास्तव में प्रोटोकॉल पर एक अच्छा समझ प्राप्त करना चाहते हैं।

हालांकि यदि आप rsync या scp के बाहर एक आसान तरीका ढूंढ रहे हैं तो पर्याप्त होना चाहिए।