,可以通过以下步骤实现:
fs
来读取和写入文件。使用fs.createReadStream()
方法读取要压缩的文件,并使用fs.createWriteStream()
方法创建一个用于写入压缩文件的可写流。archiver
来创建一个zip文件。archiver
提供了一个简单的API来创建和管理zip文件。你可以使用archiver.create()
方法创建一个新的archiver实例,并使用archiver.directory()
方法将要压缩的文件添加到zip文件中。response
对象的attachment()
方法设置响应头,指定下载的文件名和文件类型。然后,将archiver实例的输出流通过管道传输到响应流中,以将zip文件发送给客户端。下面是一个示例代码:
const fs = require('fs');
const archiver = require('archiver');
function createZipFile(req, res) {
const zipFileName = 'example.zip';
const output = fs.createWriteStream(zipFileName);
const archive = archiver('zip', {
zlib: { level: 9 } // 设置压缩级别
});
output.on('close', () => {
console.log(archive.pointer() + ' total bytes');
console.log('archiver has been finalized and the output file descriptor has closed.');
});
archive.on('error', (err) => {
throw err;
});
res.attachment(zipFileName); // 设置响应头
archive.pipe(res); // 将archiver实例的输出流传输到响应流中
archive.directory('path/to/directory', false); // 添加要压缩的文件或目录
archive.finalize(); // 完成压缩
// 返回响应
res.status(200).send('Zip file created successfully.');
}
在上面的示例中,createZipFile
函数接收一个请求对象req
和一个响应对象res
作为参数。它首先创建一个用于写入zip文件的可写流output
,然后创建一个archiver实例archive
。接下来,它设置了一些事件处理程序,如output
的close
事件和archive
的error
事件。然后,它使用res.attachment()
方法设置响应头,指定下载的文件名和文件类型。最后,它将archiver实例的输出流通过管道传输到响应流中,并调用archive.finalize()
方法完成压缩。
这是一个简单的实现,你可以根据实际需求进行调整和扩展。
领取专属 10元无门槛券
手把手带您无忧上云