javascript - node-archiver : 提取时获取重复的父 zip
问题描述
我在下面写了压缩目录:
const archiver = require('archiver');
let createArchive = function(sourceDir, destDir) {
const archive = archiver('zip');
const stream = fs.createWriteStream(destDir);
return new Promise((resolve, reject) => {
archive
.directory(sourceDir, false)
.on('error', err => reject(err))
.pipe(stream)
;
stream.on('close', () => resolve());
archive.finalize();
});
}
在压缩我的目录之前看起来像这样:
- excel存档.zip
- 测试.txt
- 测试2.gz
当我解压缩存档(称为yayy.zip
)时,其中包含以下文件:
- excel存档.zip
- 测试.txt
- 测试2.gz
- 耶耶.zip
yayy.zip
里面调用了一个无效文件。我怎样才能避免这种情况?
解决方案
代替directory
,您可以使用该glob
方法指定要压缩的文件。它需要第二个参数,您可以在其中指定要忽略的文件。
const archiver = require('archiver');
let createArchive = function(sourceDir, destDir) {
const archive = archiver('zip');
const stream = fs.createWriteStream(destDir);
return new Promise((resolve, reject) => {
archive
.on('error', err => reject(err))
.pipe(stream)
.glob(
'**/*',
{cwd: sourceDir, ignore: filename}
)
;
stream.on('close', () => resolve());
archive.finalize();
});
}
推荐阅读
- database - 订购多对多关系的最佳实践?
- shopify - 我们如何使用它的 SKU 号将产品添加到购物车中?
- angular - 为什么动态添加 Angular matTooltip 不起作用?
- html - 刷新时字段消失的问题
- php - 使用数组或其他方法来压缩多余的 elseif 条件?
- javascript - 如何使用 jQuery 在列表中选择正确的按钮?
- c# - 带有截止日期的 C# 线程调度
- android - Jetpack 导航力显示返回箭头
- r - 如何在 Rstudio 中添加多个 bsPopovers 而不会覆盖?
- javascript - paper.js 在光栅图像上创建行路径不起作用