Spaces:
Sleeping
Sleeping
var archiver = require('archiver'); | |
var fs = require('fs'); | |
var os = require('os'); | |
var path = require('path'); | |
module.exports = (file, io, data) => { | |
// Use os.tmpdir() to get the system's temporary directory | |
var tempDir = os.tmpdir(); | |
// Construct the path for the zip file in the temp directory | |
var outputPath = path.join(tempDir, file + '.zip'); | |
var output = fs.createWriteStream(outputPath); | |
var archive = archiver('zip', { | |
zlib: { level: 9 } // Sets the compression level. | |
}); | |
// listen for all archive data to be written | |
output.on('close', function() { | |
console.log(archive.pointer() + ' total bytes'); | |
console.log('archiver has been finalized and the output file descriptor has closed.'); | |
io.emit(data.token, { progress: "Completed", file: outputPath }); | |
}); | |
// This event is fired when the data source is drained no matter what was the data source. | |
output.on('end', function() { | |
console.log('Data has been drained'); | |
}); | |
// good practice to catch warnings (ie stat failures and other non-blocking errors) | |
archive.on('warning', function(err) { | |
if (err.code === 'ENOENT') { | |
// log warning | |
} else { | |
// throw error | |
throw err; | |
} | |
}); | |
// good practice to catch this error explicitly | |
archive.on('error', function(err) { | |
throw err; | |
}); | |
// pipe archive data to the file | |
archive.pipe(output); | |
// append files from a sub-directory and naming it `new-subdir` within the archive | |
archive.directory('./' + file, false); | |
// finalize the archive | |
archive.finalize(); | |
} | |