यदि आप कच्चे 'संपीड़ित' प्रारूप का उपयोग कर अपलोड कर रहे हैं, तो आपके पास अपलोड किए जा रहे डेटा के आकार पर जानकारी नहीं होगी। इस संबंध में पैक्स सही है।
आप संपीड़न बफर की शुरुआत में इसे 4 बाइट हेडर के रूप में स्टोर कर सकते हैं - यह मानते हुए कि फ़ाइल का आकार 4 जीबी से अधिक नहीं है।
एक उदाहरण के रूप में कुछ सी कोड:
uint8_t *compressBuffer = calloc(bufsize + sizeof (uLongf), 0);
uLongf compressedSize = bufsize;
*((uLongf *)compressBuffer) = filesize;
compress(compressBuffer + sizeof (uLongf), &compressedSize, sourceBuffer, bufsize);
तो फिर तुम आकार compressedSize + sizeof (uLongf) की पूरी compressBuffer भेजें। सही आकार को भेजने के लिए
// data is in compressBuffer, assume you already know compressed size.
uLongf originalSize = *((uLongf *)compressBuffer);
uint8_t *realCompressBuffer = compressBuffer + sizeof (uLongf);
आप ग्राहक पर भरोसा नहीं करते हैं तो आप असम्पीडित किसी प्रकार का प्रदर्शन करने के लिए की आवश्यकता होगी: जब आप सर्वर साइड पर इसे प्राप्त आप डेटा वापस पाने के लिए निम्नलिखित कोड का उपयोग कर सकते सर्वर आकार पर डेटा जांच। असम्पीड्रेस/dev/null का उपयोग करने का सुझाव उचित है।
यदि आप एक .zip फ़ाइल अपलोड कर रहे हैं, तो इसमें एक निर्देशिका है जो आपको असम्पीडित होने पर फ़ाइल का आकार बताती है। यह जानकारी फ़ाइल प्रारूप में फिर से बनाई गई है, हालांकि यह दुर्भावनापूर्ण क्लाइंट के अधीन है।
मेरा अनुमान है कि इसे असम्पीड्रेस क्यों कहा जाता है, यह 90 के दशक के आरंभ में दिखाई देने वाले पीकेज़िप नामक प्रोग्राम की वजह से है। Pkunzip नामक एक अनुकरणीय कार्यक्रम था। मुझे लगता है कि "un" चारों ओर अटक गया। http://en.wikipedia.org/wiki/PKZIP – gradbot
विकिपीडिया पर अधिक शोध से पता चलता है कि यह एक मुकदमा था जिसने नाम बदलने के लिए मजबूर किया। "काट्ज़ ने अपनी उपयोगिता के नाम पीकेपीक और पंकपैक में बदल दिए।" बाद में उन्होंने ज़िप नामक अपना संस्करण बनाया। "नाम" ज़िप "(जिसका मतलब है" गति ") काटज़ के दोस्त रॉबर्ट महनी द्वारा सुझाया गया था। वे यह इंगित करना चाहते थे कि उनका उत्पाद एआरसी और उस समय के अन्य संपीड़न प्रारूपों से तेज होगा।" इसलिए ज़िप और अनजिप पैदा हुआ था। – gradbot
आह-हा। दिलचस्प :) – AriX