expressjsHow can I use Express.js to generate a zip response?
Using Express.js to generate a zip response is quite straightforward. The following example code block demonstrates how to generate a zip response using Express.js.
const express = require('express');
const app = express();
const archiver = require('archiver');
// create a file to stream archive data to.
var output = fs.createWriteStream(__dirname + '/example.zip');
var archive = archiver('zip', {
zlib: { level: 9 } // Sets the compression level.
});
// listen for all archive data to be written
// 'close' event is fired only when a file descriptor is involved
output.on('close', function() {
console.log(archive.pointer() + ' total bytes');
console.log('archiver has been finalized and the output file descriptor has closed.');
});
// This event is fired when the data source is drained no matter what was the data source.
// It is not part of this library but rather from the NodeJS Stream API.
// @see: https://nodejs.org/api/stream.html#stream_event_end
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, putting its contents at the root of archive
archive.directory('subdir/', false);
// finalize the archive (ie we are done appending files but streams have to finish yet)
// 'close', 'end' or 'finish' may be fired right after calling this method so register to them beforehand
archive.finalize();
The output of the example code is:
2048 total bytes
archiver has been finalized and the output file descriptor has closed.
Data has been drained
The code consists of the following parts:
- Require Express.js and instantiate an Express.js app
- Require archiver module
- Create a file to stream archive data to
- Instantiate archiver with zip format and set compression level
- Listen for close event
- Listen for end event
- Listen for warning event
- Listen for error event
- Pipe archive data to the file
- Append files from a sub-directory
- Finalize the archive
Helpful links
More of Expressjs
- How do I find Express.js tutorials on YouTube?
- How do I set the time zone in Express.js?
- How do I use Express.js to handle x-www-form-urlencoded data?
- How can I use Express.js with TypeScript?
- How can I use an ExpressJS webhook to receive data from an external source?
- How do I manage user roles in Express.js?
- How do I create a REST API with Express.js?
- How do I use Express.js to make an options request?
- How can I use express-zip js to zip and download files?
- How do I download a zip file using Express.js?
See more codes...