How to create a ZIP archive in Total.js?
- check if the following command works in your OS
$ zip --version
- this example uses operations which are supported in Total.js
+v2.4.0
Create an operation
E.g. /definitions/operations.js
:
const Exec = require('child_process').exec;
const OPTIONS = {};
NEWOPERATION('compress', function(error, value, callback) {
// value.path
// value.filename
var isFile = U.getExtension(value.path) !== '';
var target = '*';
if (isFile) {
target = U.getName(value.path);
OPTIONS.cwd = value.path.substring(0, value.path.length - target.length);
} else
OPTIONS.cwd = value.path;
// Exclude directory "/tmp/"
// Exec('zip --exclude=*/tmp/* -r {0} *'.format(value.filename)
Exec('zip -r {0} {1}'.format(value.filename, target), OPTIONS, function(err, response) {
err && error.push(err);
callback(value.filename);
});
});
Usage
You can execute the below code anywhere in your Total.js application:
// Compress a directory:
OPERATION('compress', { path: '/home/documents/', filename: '/home/documents.zip' }, function(err, filename) {
console.log(err, filename);
});
// Compress Total.js "databases" directory:
OPERATION('compress', { path: F.path.databases(), filename: F.path.public('databases.zip') }, function(err, filename) {
console.log(err, filename);
});
// Compress a file:
OPERATION('compress', { path: '/home/documents/total.js', filename: '/home/total.zip' }, function(err, filename) {
console.log(err, filename);
});