Node.js存档器需要语法来通过Glob排除文件类型

崩溃

使用archiver.js(用于Node.js),我需要从递归(多子目录)存档中排除图像。这是我的代码:

const zip = archiver('zip', { zlib: { level: 9 } });
const output = await fs.createWriteStream(`backup/${fileName}.zip`);
res.setHeader('Content-disposition', `attachment; filename=${fileName}.zip`);
res.setHeader('Content-type', 'application/download');
output.on('close', function () {
  res.download(`backup/${fileName}.zip`, `${fileName}.zip`);
});
output.on('end', function () {
  res.download(`backup/${fileName}.zip`, `${fileName}.zip`);
});
zip.pipe(output);
zip.glob('**/*',
  {
    cwd: 'user_uploads',
    ignore: ['*.jpg', '*.png', '*.webp', '*.bmp'],
  },
  {});
zip.finalize();

问题在于它没有排除忽略文件。我可以请求语法帮助吗?

克里斯托斯·莱特拉斯(Christos Lytras)

Archiver使用Readdir-Glob进行glob匹配,该匹配使用minimatch进行匹配。

Readdir-Globnode-readdir-glob/index.js#L147)中的匹配是针对包括路径名在内的完整文件名完成的,它不允许我们应用该选项matchBase,而该选项将只不过是完整路径的基本名称。

为了使其正常工作,您有2个选择:


1.使您的glob排除文件扩展名

您可以使用glob否定符将glob表达式转换为排除不希望包含在存档文件中的所有文件扩展名!(...),并且它将包含除与否定表达式匹配的内容以外的所有内容:

zip.glob(
  '**/!(*.jpg|*.png|*.webp|*.bmp)',
  {
    cwd: 'user_uploads',
  },
  {}
);

2.进行最小匹配以使用完整文件路径名

为了使minimatch在我们无法设置该matchBase选项的情况下起作用,我们必须包括匹配的目录glob才能使其起作用:

zip.glob(
  '**/*',
  {
    cwd: 'user_uploads',
    ignore: ['**/*.jpg', '**/*.png', '**/*.webp', '**/*.bmp'],
  },
  {}
);

行为

关于选项Readdir-Glob的这种行为有点令人困惑ignore

选项

ignore:Glob模式或Glob模式数组可排除匹配项。如果文件或文件夹至少与提供的一种模式匹配,则不会返回。它不会阻止文件夹内容中的文件被返回。

这意味着igrore项目必须是实际的全局表达式,必须包含整个路径/文件表达式。当我们指定时*.jpg,它将匹配根目录中的文件而不匹配子目录中的文件如果我们想将JPG文件排除在目录树的深处,则必须使用“包括所有目录”模式以及文件扩展名模式来做到这一点**/*.jpg

仅在子目录中排除

如果只想在特定子目录中排除某些文件扩展名,则可以使用如下所示的否定模式将子目录添加到路径中:

// The glob pattern '**/!(Subdir)/*.jpg' will exclude all JPG files,
// that are inside any 'Subdir/' subdirectory.

zip.glob(
  '**/*',
  {
    cwd: 'user_uploads',
    ignore: ['**/!(Subdir)/*.jpg'],
  },
  {}
);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用于排除多个文件的node.js glob模式

来自分类Dev

用于排除多个文件的node.js glob模式

来自分类Dev

Node.js通过scp监视目录以获取传入的存档

来自分类Dev

需要多个API文件Node.js

来自分类Dev

node.js需要json文件

来自分类Dev

node.js需要json文件

来自分类Dev

需要多个API文件Node.js

来自分类Dev

排除node.js错误

来自分类Dev

Node.js JavaScript语法

来自分类Dev

Node.js对象语法

来自分类Dev

Node.js JavaScript语法

来自分类Dev

Node js写入文件

来自分类Dev

尝试在Node.js中将CSV文件转换为JSON时会产生语法错误,而仅需要CSV文件

来自分类Dev

Node.js-需要睡眠

来自分类Dev

Node.js需要缓存

来自分类Dev

需要升级(node.js)

来自分类Dev

更新html文件时是否需要重新启动node.js的http服务器

来自分类Dev

Node js Mongoose 类型错误

来自分类Dev

Concat并使用gulp与node.js文件冲突来缩小

来自分类Dev

Node.js:如何通过服务器将远程文件流传输到用户?

来自分类Dev

通过托管在GAE中的node.js Express服务器上传大文件

来自分类Dev

对需要证书的服务器的Node.js Rest调用

来自分类Dev

正文解析器Node JS的不需要的格式

来自分类Dev

TypeError:不可排序的类型:Node()<Node()

来自分类Dev

通过node js索引文件或通过node命令运行所有sequelize迁移代码

来自分类Dev

在node.js中本身需要一个文件

来自分类Dev

在node.js中需要一个自身的文件

来自分类Dev

node.js冲突:/ sbin / node与/ usr / bin / node

来自分类Dev

在Node JS中上传文件