nodejs如何把zip返给前端
时间: 2024-10-19 15:13:43 浏览: 25
在Node.js中,你可以使用内置的`zlib`模块来创建ZIP文件,然后将其转换成可以发送到前端的流(如Buffer),最后通过HTTP响应头设置`Content-Disposition`为"attachment",让浏览器下载而不是直接显示。以下是基本步骤:
1. 首先,安装需要的库,如果还没有的话:
```bash
npm install archiver
```
2. 引入必要的模块:
```javascript
const fs = require('fs');
const path = require('path');
const archiver = require('archiver');
```
3. 创建一个新的Zip文件流:
```javascript
let zip = archiver('zip', {
zlib: { level: 9 } // 提高压缩级别
});
```
4. 添加文件到zip:
```javascript
function addFileToZip(zipObj, filePath) {
return new Promise((resolve, reject) => {
zip.append(fs.createReadStream(filePath), (err) => {
if (err) reject(err);
else resolve();
});
});
}
// 假设你有一个要打包的文件列表filesToZip
filesToZip.forEach(file => {
addFileToZip(zip, file).catch(e => console.error(e));
});
```
5. 将zip写入内存,准备发送:
```javascript
let output = Buffer.alloc(0);
zip.on('data', (data) => {
output = Buffer.concat([output, data]);
});
zip.finalize(); // 结束添加文件
```
6. 完成后,创建一个HTTP响应并设置头部,然后将缓冲区作为响应体:
```javascript
http.createServer((req, res) => {
// 设置正确的MIME类型
res.setHeader('Content-Type', 'application/zip');
res.setHeader('Content-Disposition', 'attachment; filename=archive.zip');
// 发送zip数据
res.writeHead(200);
res.end(output);
}).listen(3000); // 或者根据需要监听其他端口
```
阅读全文