2012-03-23 18 views
5

मैं Node.js उपयोग करने के लिए एक मौजूदा फ़ोल्डर से एक ज़िप फ़ाइल बनाने, और संरचना की रक्षा करने के कोशिश कर रहा हूँ के साथ संरचना के संरक्षण।एक फ़ोल्डर से एक ज़िप संग्रह बनाना और Node.js

मैं वहाँ उम्मीद थी बात इस तरह की अनुमति देने के लिए एक सरल मॉड्यूल होगा:

archiver.create("../folder", function(zipFile){ 
    console.log('et viola'); 
}); 

लेकिन मैं एक तरह से कुछ भी नहीं मिल सकता है!

मैं आसपास googling किया गया है, और सबसे अच्छा मैं अब तक मिल गया है zipstream है, लेकिन जहाँ तक मैं बता सकता हूँ वहाँ जो मैं चाहता करने के लिए कोई रास्ता नहीं है। मैं वास्तव में कमांडलाइन उपयोगिताओं में कॉल नहीं करना चाहता, क्योंकि ऐप को क्रॉस प्लेटफॉर्म होना है।

किसी भी मदद की सराहना की जाएगी।

धन्यवाद।

उत्तर

2

यह पूरी तरह से कोड मुक्त नहीं है, लेकिन आप folder.js के साथ node-native-zip का उपयोग कर सकते हैं। उपयोग:

function zipUpAFolder (dir, callback) { 
    var archive = new zip(); 

    // map all files in the approot thru this function 
    folder.mapAllFiles(dir, function (path, stats, callback) { 
     // prepare for the .addFiles function 
     callback({ 
      name: path.replace(dir, "").substr(1), 
      path: path 
     }); 
    }, function (err, data) { 
     if (err) return callback(err); 

     // add the files to the zip 
     archive.addFiles(data, function (err) { 
      if (err) return callback(err); 

      // write the zip file 
      fs.writeFile(dir + ".zip", archive.toBuffer(), function (err) { 
       if (err) return callback(err); 

       callback(null, dir + ".zip"); 
      });      
     }); 
    });  
} 
+0

धन्यवाद! ज़िप बनाया गया है, लेकिन दुर्भाग्यवश यह दूषित है और खाली दिखाई देता है। मैं इसके साथ खेलूँगा और कोशिश करूँगा कि समस्या क्या है। – user1257359

+0

दरअसल, यह केवल * थोड़ा * दूषित लगता है;) जब मैं बनाए गए ज़िप को आज़माकर एक्सप्लोर करता हूं, तो यह खाली दिखाई देता है, लेकिन जब मैं इसे निकालता हूं, तो सामग्री ठीक दिखती है। एक महान, तेज़ उत्तर के लिए धन्यवाद! – user1257359

+0

एक आकर्षण की तरह काम करता है! – Tim

1

यह नोड के अंतर्निहित execfile फ़ंक्शन का उपयोग करके भी सरल हो सकता है। यह एक प्रक्रिया उत्पन्न करता है और ओएस के माध्यम से ज़िप आदेश को निष्पादित करता है। सब कुछ बस काम करता है।

var execFile = require('child_process').execFile; 

execFile('zip', ['-r', '-j', zipName, pathToFolder], function(err, stdout) { 
     console.log(err); 
     logZipFile(localPath); 
    }); 

-j झंडा 'Junks' फ़ाइल पथ, यदि आप एक sibdirectory ज़िप करने जाते हैं, और ज़िप फ़ाइल के भीतर अत्यधिक नेस्टिंग नहीं करना चाहती।

यहाँ some documentation on execfile है। यहां a man page for zip है।

+0

ओप ने विशेष रूप से कहा था कि वे मूल और क्रॉस प्लेटफ़ॉर्म और कमांड लाइन कॉल नहीं चाहते थे। – JohnC

-1

Easy-zip, npm install easy-zip उपयोग करके, आप कर सकते हैं: बहुत ज्यादा

var zip5 = new EasyZip(); 
zip5.zipFolder('../easy-zip',function(){ 
    zip5.writeToFile('folderall.zip'); 
}); 
+1

मैं [इस मुद्दे] की वजह से इस का उपयोग करना चाहिये नहीं होता (https://github.com/owenchong/easy-zip/issues/2)। – rax

+0

मैं 'उपयोग कर रहे हैं आसान zip' हाल ही में और मुद्दा यह है कि प्रकाश डाला @rax में चलाने नहीं किया है। – developius

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