最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Creating a zip archive from a folder and preserving structure with Node.js - Stack Overflow

programmeradmin1浏览0评论

I'm trying to use Node.js to create a zip file from an existing folder, and preserve the structure.

I was hoping there would be a simple module to allow this kind of thing:

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

but I can't find anything of the sort!

I've been googling around, and the best I've found so far is zipstream, but as far as I can tell there's no way to do what I want. I don't really want to call into mandline utilities, as the the app has to be cross platform.

Any help would be greatly appreciated.

Thanks.

I'm trying to use Node.js to create a zip file from an existing folder, and preserve the structure.

I was hoping there would be a simple module to allow this kind of thing:

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

but I can't find anything of the sort!

I've been googling around, and the best I've found so far is zipstream, but as far as I can tell there's no way to do what I want. I don't really want to call into mandline utilities, as the the app has to be cross platform.

Any help would be greatly appreciated.

Thanks.

Share Improve this question asked Mar 23, 2012 at 15:15 user1257359user1257359 1051 gold badge1 silver badge6 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 2

It's not entirely code free, but you can use node-native-zip in conjunction with folder.js. Usage:

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");
            });                    
        });
    });    
}

This can be done even simpler using node's built-in execfile function. It spawns a process and executes the zip mand through the os, natively. Everything just works.

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

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

The -j flag 'junks' the file path, if you are zipping a sibdirectory, and don't want excessive nesting within the zip file.

Here's some documentation on execfile. Here's a man page for zip.

Using Easy-zip, npm install easy-zip, you can do:

var zip5 = new EasyZip();
zip5.zipFolder('../easy-zip',function(){
    zip5.writeToFile('folderall.zip');
});
发布评论

评论列表(0)

  1. 暂无评论