2011-12-17 8 views
11

मैं सोच रहा था कि कोई तरीका है जिसके द्वारा मैं पूरी फ़ाइल को डाउनलोड किए बिना .rar या .zip फ़ाइल का केवल एक हिस्सा डाउनलोड कर सकता हूं? फाइलें ए, बी, सी और डी युक्त एक ज़िप फ़ाइल है, मुझे केवल ए की आवश्यकता है। क्या मैं किसी भी तरह से डाउनलोड कर सकता हूं, केवल ए को डाउनलोड करने के लिए डाउनलोड कर सकता हूं या यदि संभव हो तो सर्वर में फ़ाइल निकालें और केवल एक प्राप्त करें?क्या एक ज़िप संग्रह (उदा। एक फ़ाइल) का सिर्फ एक हिस्सा डाउनलोड करना संभव है?

+3

यह एक विश्वासघात क्यों कहते हैं? – Nonym

+0

मूर्खतापूर्ण शीर्षक के बावजूद, मुझे लगता है कि यह एक बहुत अच्छा सवाल है। हाँ, यह मुमकिन है"। हालांकि, आवश्यक काम की मात्रा तुच्छ नहीं है ... अंत उपयोगकर्ता के लिए यह "व्यवहार्य नहीं है" (जब तक कि कोई पहले से ही ऐसा टूल नहीं बना लेता है)। –

+0

(चूंकि कोई प्रोग्रामिंग भाषा टैग नहीं है, मुझे लगता है कि वास्तव में ऐसे समाधान को कोड करने की कोई इच्छा नहीं है :-) –

उत्तर

7

एक तरह से, हाँ, आप कर सकते हैं।

ZIP file format कहता है कि "केंद्रीय निर्देशिका" है। असल में, यह एक सारणी है जो संग्रहीत करती है कि संग्रह में कौन सी फाइलें हैं और उनके पास क्या ऑफसेट है।

तो, Content-Range का उपयोग करके आप अंत से फ़ाइल का हिस्सा डाउनलोड कर सकते हैं (केंद्रीय निर्देशिका ज़िप फ़ाइल में आखिरी चीज है) और इसमें केंद्रीय निर्देशिका की पहचान करने का प्रयास करें। यदि आप सफल होते हैं तो आप फ़ाइल सूची और ऑफ़सेट जानते हैं, ताकि आप आगे बढ़ सकें और उन हिस्सों को अलग से प्राप्त कर सकें और उन्हें स्वयं को डिकंप्रेस कर सकें।

यह दृष्टिकोण काफी त्रुटि-प्रवण है और काम करने की गारंटी नहीं है। लेकिन सामान्य रूप से हैकिंग है :-)

इसके लिए एक कस्टम सर्वर बनाना एक और संभावित तरीका होगा (अधिक जानकारी के लिए @pst's answer देखें)।

+0

मुझे आश्चर्य है कि क्या कोई लाइब्रेरी है जो HTTP सामग्री रेंज अनुरोधों को किसी प्रकार की विकृत धारा IO के रूप में मैप कर सकती है ... :) (वास्तव में, यह संभव होगा [fsvo], वर्णित अनुसार, स्ट्रीम इनपुट स्वीकार करने वाली कई भाषाओं के लिए कुछ ऐसा नहीं है जिसे मैं स्पर्श करना चाहता हूं।) –

+1

यह हैकिंग नहीं है लेकिन सही कार्य करने का तरीका है। दरअसल, HTTP यहां ज़िप स्ट्रीम तक पहुंचने का एक तरीका बन जाता है, और धाराओं के साथ काम करने वाले किसी भी ज़िप घटक को दूरस्थ स्ट्रीम से केवल एक फ़ाइल निकालने के लिए उपयोग किया जा सकता है। –

+0

@ यूजीन मेवेस्की 'एल्डोस्कोप हां, आप शायद सही हैं, मैंने इसे इस तरह से नहीं देखा :-) –

0

मुझे लगता है कि सर्गेई तुलेंटसेव विचार शानदार है।

हालांकि, अगर सर्वर पर नियंत्रण है - उदा। कस्टम कोड तैनात किया जा सकता है - फिर यह एक मामूली ऑपरेशन (चीज़ों की योजना में :) अनुरोध को मैप/संभालने के लिए है, ज़िप संग्रह के प्रासंगिक भाग को निकालें, और डेटा को HTTP स्ट्रीम में वापस भेज दें।

अनुरोध दिखाई देंगे:

http://foo.bar/myfile.zip_a.jpeg 

कौन सा निकालने का मतलब होगा - और वापसी - "myfile.zip" से "a.jpeg"।

(मैं जानबूझकर इतना है कि ब्राउज़रों की संभावना डाउनलोड संवाद दिखाई देने पर उसे में नाम के रूप में चुनते हैं "myfile.zip_a.jpeg" इस मूर्खतापूर्ण स्वरूप का चयन किया।)

बेशक

, कैसे इस कार्यान्वित किया जाता है निर्भर करता है सर्वर/भाषा/ढांचे पर और पहले से ही मौजूदा समाधान हो सकते हैं जो समान ऑपरेशन का समर्थन करते हैं (लेकिन मुझे नहीं पता)।

हैप्पी कोडिंग।

+0

कस्टम सर्वर के मेरे विचार का अच्छा विस्तार। धन्यवाद :-) –

+0

@ सेर्गी टुलेंटसेव मैं आपके जैसे क्लाइंट को लिखने के लिए प्रेरित हूं :) –

+0

आपके पास बहुत खाली समय है, हुह? :-) लेकिन हाँ, मैं भी मोहक हूं :-) –

0

इसके बजाय, Google डॉक्स के पाठक का उपयोग करें। गोटो इस लिंक- https://docs.google.com/viewer?url=http://file.zip और ज़िप फ़ाइल का पता बदलें। यह ज़िप और रार फ़ाइलों दोनों को खोल सकता है

+1

क्या एक चाल है। आसान और कुशल। पैरामीटर वाले यूआरएल के साथ संग्रह के लिए, उन्हें urlencode करना न भूलें। –

+0

अब और काम नहीं कर रहा है ... [उदाहरण] (https://docs.google.com/viewer?url=http://www.colorado.edu/conflict/peace/download/peace.zip) – boramalper

+0

हालांकि यह समस्या को हल करने के लिए एक महत्वपूर्ण संकेत हो सकता है, एक अच्छा जवाब भी समाधान का प्रदर्शन करता है। कृपया अपना नाम दिखाने के लिए उदाहरण कोड प्रदान करने के लिए [संपादित करें]। वैकल्पिक रूप से, इसे इसके बजाय टिप्पणी के रूप में लिखने पर विचार करें। –

1

आप एफडीएम का उपयोग कर सकते हैं, इसका समर्थन ज़िप फ़ाइल आंशिक डाउनलोड: नि: शुल्क डाउनलोड प्रबंधक आपको ज़िप फ़ाइल के केवल आवश्यक भाग को डाउनलोड करने देता है।

http://www.freedownloadmanager.org/features.htm

+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/1874 9 488) – aerokite

+0

यह एक उपकरण है, कोड या ढांचा नहीं। यह साइट प्रोग्राम खोजने के बारे में नहीं है, यह उन्हें बनाने के बारे में है। – kelin

10

चाल क्या सर्जियो इसे मैन्युअल रूप से कर के बिना पता चलता है करने के लिए है। यह आसान है यदि आप ज़िप फ़ाइल को HTTP-समर्थित वर्चुअल फाइल सिस्टम के माध्यम से आरोहित करते हैं तो उस पर मानक unzip कमांड का उपयोग करें। इस तरह unzip उपयोगिता के I/O कॉल का अनुवाद HTTP रेंज में किया जाता है, जिसका अर्थ केवल उस ज़िप के भाग जिन्हें आप नेटवर्क पर स्थानांतरित करना चाहते हैं।

HTTPFS का उपयोग करके लिनक्स के लिए यहां एक उदाहरण है, जो बहुत हल्का वर्चुअल फाइल सिस्टम (यह FUSE का उपयोग करता है)। विंडोज के लिए समान उपकरण हैं।

$ wget http://sourceforge.net/projects/httpfs/files/httpfs/1.06.07.02 
$ tar -xjf httpfs_1.06.07.10.tar.bz2 
$ rm httpfs 
$ ./make_httpfs 

माउंट एक दूरस्थ ज़िप फ़ाइल और इसे से एक फ़ाइल निकालने:

प्राप्त करें/httpfs निर्माण

$ mkdir mount_pt 
$ sudo ./httpfs http://server.com/zipfile.zip mount_pt 
$ sudo ls mount_pt 
zipfile.zip 
$ sudo unzip -p mount_pt/zipfile.zip the_file_I_want.txt > the_file_I_want.txt 
$ sudo umount mount_pt 
बेशक आप भी बगल में जो कुछ भी अन्य उपकरणों का उपयोग कर सकते हैं के

कमांड लाइन एक। (मुझे सूडो की आवश्यकता है क्योंकि ऐसा लगता है कि मेरी मशीन पर FUSE सेट अप किया गया है, आपको इसकी आवश्यकता नहीं होनी चाहिए)

मुझे पता है कि यह एक पुराना सवाल है, यह दूसरों के लिए इस समस्या में चल रहा है ।

3

एक सामान्य व्यक्ति को एक संपीड़ित ज़िप फ़ाइल से एक व्यक्तिगत फ़ाइल डाउनलोड करने में सक्षम होने के कई तरीके हैं, दुर्भाग्यवश वे सामान्य ज्ञान नहीं हैं।

+0

मुझे आश्चर्य है, अगर आंशिक-ज़िप आपके लिए काम करता है। मेरे लिए यह अच्छा वादा लगता है, जिसने मुझे कुछ भी नहीं दिया। –

+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाले पदों/1874 9 4 9 1) – blue112

0

क्या आप अपनी फ़ाइल को ज़िप के पीछे दिखाई देने की व्यवस्था कर सकते हैं?

डाउनलोड 100k:

$ curl -r -100000 https://www.keepassx.org/releases/2.0.2/KeePassX-2.0.2.zip -o tail.zip 
% Total % Received % Xferd Average Speed Time Time  Time Current 
          Dload Upload Total Spent Left Speed 
100 97k 100 97k 0  0 84739  0 0:00:01 0:00:01 --:--:-- 84817 

चेक क्या फाइलों हम मिला:

$ unzip -t tail.zip 
    (please check that you have transferred or created the zipfile in the 
    appropriate BINARY mode and that you have compiled UnZip properly) 
error [tail.zip]: attempt to seek before beginning of zipfile 
    (please check that you have transferred or created the zipfile in the 
    appropriate BINARY mode and that you have compiled UnZip properly) 
error [tail.zip]: attempt to seek before beginning of zipfile 
    (please check that you have transferred or created the zipfile in the 
    appropriate BINARY mode and that you have compiled UnZip properly) 
error [tail.zip]: attempt to seek before beginning of zipfile 
    (please check that you have transferred or created the zipfile in the 
    appropriate BINARY mode and that you have compiled UnZip properly) 
error [tail.zip]: attempt to seek before beginning of zipfile 
    (please check that you have transferred or created the zipfile in the 
    appropriate BINARY mode and that you have compiled UnZip properly) 
    testing: KeePassX-2.0.2/share/translations/keepassx_uk.qm OK 
    testing: KeePassX-2.0.2/share/translations/keepassx_zh_CN.qm OK 
    testing: KeePassX-2.0.2/share/translations/keepassx_zh_TW.qm OK 
    testing: KeePassX-2.0.2/zlib1.dll OK 
At least one error was detected in tail.zip. 

तो पिछले फ़ाइल निकालने:

$ unzip tail.zip KeePassX-2.0.2/zlib1.dll 
Archive: tail.zip 
error [tail.zip]: missing 7751495 bytes in zipfile 
    (attempting to process anyway) 
    inflating: KeePassX-2.0.2/zlib1.dll 
संबंधित मुद्दे