【问题标题】:Gzipping using streams in Nodejs在 Nodejs 中使用流进行 Gzip 压缩
【发布时间】:2021-06-21 21:59:01
【问题描述】:

我尝试压缩文件,但出现以下错误:“错误:EISDIR:对目录的非法操作,读取”。`

import { createWriteStream ,createReadStream } from "fs";
import { pipeline } from "stream";
import { createGzip } from "zlib";
const filename= process.argv[2];
const gzip=createGzip();
const source=createReadStream(filename);
const destination = createWriteStream(`${filename}.gz`);

pipeline(source,gzip,destination,(err)=>{
    console.error(`Some error ocurred : ${err}`);
    process.exitCode=1;
})

我该如何解决?

【问题讨论】:

  • 你的代码是正确的,只要确保你的filename指向你要压缩的文件。
  • 如果您尝试压缩整个文件夹,您首先需要从中创建一个“tar”。然后就可以压缩 tar 文件了。 zlib crompressing 仅适用于文件而不适用于整个文件夹。 en.wikipedia.org/wiki/Gzip & en.wikipedia.org/wiki/Tar_(computing)

标签: node.js stream


【解决方案1】:

EISDIR 代表"Error, Is Directory"。这意味着 NPM 正在尝试对文件执行某些操作,但它是一个目录。在您的情况下,您正在尝试读取一个文件,该文件实际上是一个目录。 这个问题可能有两个原因。

  1. 您可以在阅读源中提供目录的路径。
    解决方案- 通过调试或调试来检查代码中的源文件路径。哪个 应该是文件路径(eg. /YOUR/DIRECTORY/FILE_NAME.txt)。

  2. 您的 NPM 设置可能指向一个不存在的目录。
    解决方案- 检查以下目录路径上的 NPM 设置:

    C:\Users\{User}\.npmrc

    打开.npmrc 并读取可能具有任何文件引用路径的文件 你的问题的原因。 现在,只需删除这一行,然后保存文件。

您应该通过查看这些要点来解决此问题或有解决的想法。

[如果这个答案对您有帮助,请投票...]

【讨论】:

  • 这与 npm 无关。错误代码来自 node.js 而不是 npm。剩下的(路径/文件的东西)你是对的。 npm “只是”一个用于管理 node_modules 的包管理器。 OP 甚至不使用任何包装。他使用内置节点模块而不是任何外部资源。请编辑您的答案
  • 感谢@Marc 的考虑。但我想让您知道,如果 npm 或在应用程序中任何地方使用的其他节点库的配置 (eg. npm config set) 有任何更新,则此错误可能与 NPM 有关。所以我给了他/她两个选项(作为一个概括的答案)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
  • 2020-12-13
相关资源
最近更新 更多