備注說明:
1.需要依賴 archiver
2.調用方法的時候,一定要加上try...catch...
try {
await all_down(list,response)
}catch (e) {
}
3.所有的文件流追加完后,一定記得
archive.finalize();

1 //引入依賴 2 var archiver = require('archiver'); 3 //定義參數 4 let list=[{path:‘img1.png’,name:'圖片1'},{path:‘img2.png’,name:'圖片2'}] 5 6 async function all_down(list,response) { 7 var archive = archiver('zip');//設置壓縮包類型 8 archive.on('error', function(err) { 9 throw err; 10 }); 11 archive.store = true; 12 archive.pipe(response); 13 14 for (let i=0;i<list.length;i++) { 15 let item=list[i] 16 let path=item.path 17 let stream =fs.createReadStream(path);//獲取圖片流 18 let index=path.lastIndexOf('.') 19 let extname=path.substring(index)//獲取圖片后綴名 20 let name = item.name+extname; //定義成需要的名稱 21 archive.append(stream, { name: name }) 22 if (i==list.length-1){ 23 //最后一個文件流append到archive后,關閉archive 24 archive.finalize(); 25 } 26 }; 27 var fileName = 'text.zip';//壓縮包名稱 28 //設置header 29 response.setHeader('Content-Type', 'application/x-zip'); 30 response.setHeader("Content-Disposition", "attachment; filename=" + new Buffer(fileName).toString('binary')); 31 archive.on('finish', function(err) { 32 response.end('binary'); 33 }); 34 }
最終結果: