2017-07-21 8 views
5

मैं कुछ डेटा को लिखने योग्य स्ट्रीम में ज़िप करना चाहता हूं।node.js स्मृति को ज़िप को संपीड़ित

उद्देश्य स्मृति में सभी को करना है और डिस्क पर वास्तविक ज़िप फ़ाइल नहीं बनाना है।

केवल परीक्षण के लिए, मैं डिस्क पर एक ज़िप फ़ाइल बना रहा हूं। लेकिन जब मैं output.zip खोलने का प्रयास करता हूं तो मुझे निम्न त्रुटि मिलती है: "संग्रह या तो अज्ञात प्रारूप या क्षतिग्रस्त है"। (विंडोज 7 पर विनजिप और मैक पर भी इसी तरह की त्रुटि)

मैं क्या गलत कर रहा हूं?

const fs = require('fs'), 
    archiver = require('archiver'), 
    streamBuffers = require('stream-buffers'); 

let outputStreamBuffer = new streamBuffers.WritableStreamBuffer({ 
    initialSize: (1000 * 1024), // start at 1000 kilobytes. 
    incrementAmount: (1000 * 1024) // grow by 1000 kilobytes each time buffer overflows. 
}); 

let archive = archiver('zip', { 
    zlib: { level: 9 } // Sets the compression level. 
}); 
archive.pipe(outputStreamBuffer); 

archive.append("this is a test", { name: "test.txt"}); 
archive.finalize(); 

outputStreamBuffer.end(); 

fs.writeFile('output.zip', outputStreamBuffer.getContents(), function() { console.log('done!'); }); 
+1

"क्या मैं गलत कर रहा हूँ?" हम उस प्रश्न का उत्तर नहीं दे सकते हैं जबतक कि आप हमें नतीजे बताते हैं कि आप जो परिणाम प्राप्त कर रहे हैं और यह आपके द्वारा अपेक्षित नतीजे से अलग कैसे है। –

+0

आप सही हैं। मैंने अपना प्रश्न अपडेट कर लिया है। thx –

उत्तर

4

आप आउटपुट स्ट्रीम में सामग्री को लिखे जाने की प्रतीक्षा नहीं कर रहे हैं।

टिप्पणी बाहर outputStreamBuffer.end(); अपने कोड से और निम्न के लिए इसे बदल ...

outputStreamBuffer.on('finish', function() { 
    fs.writeFile('output.zip', outputStreamBuffer.getContents(), function() { 
     console.log('done!'); 
    }); 
}); 
+0

यह काम नहीं करता है। जब मैं ज़िप फ़ाइल खोलता हूं तो मुझे output.zip.cpgz –

+3

नामक एक और फ़ाइल दिखाई देती है, मेरा उत्तर @YoniMayer अपडेट किया गया। कोशिश करो। मेरे लिए काम किया –

+1

@ मैट 'फिनिश' को 'एंड' के बाद बुलाया जाता है, इसलिए यह अंतिम घटना है। किसी भी विशेष कारण से आप 'अंत' का उपयोग करना चाहते हैं? –

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