我想知道是否可以使用Node标准库中的https.get()来下载一个压缩包并将其直接解压缩到一个子文件夹中.

我找到了很多解决方案,都是先下载压缩包,然后再解压缩.但有没有办法直接做到这一点呢?

这是我的try :

const zlib = require("node:zlib");
const fs = require("fs");
const { pipeline } = require("node:stream");
const https = require("https");

const DOWNLOAD_URL =
  "https://downloadserver.com/data.zip";
const unzip = zlib.createUnzip();
const output = fs.createWriteStream("folderToExtract");

https.get(DOWNLOAD_URL, (res) => {
  pipeline(res, unzip, output, (error) => {
    if (error) console.log(error);
  });
});

但我得到了这样的错误:

Error: incorrect header check
at Zlib.zlibOnError [as onerror] (node:zlib:189:17) {
errno: -3,
code: 'Z_DATA_ERROR'
}

我很好奇,这有可能吗?

推荐答案

大多数解压缩程序从压缩文件的第end位开始,读取那里的中央目录,并使用该目录查找要解压缩的条目.这需要在一开始就可以访问整个压缩文件.

您需要的是一个流解压缩程序,它从压缩文件的开头开始.你可以试一下unzip-stream个,看看它是否符合你的需要.

Node.js相关问答推荐

如何使用多个OR参数从多个集合聚合

如何呈现ejs.renderFile中包含的子模板?

NPM如何管理node_modules传递依赖?

我如何在 Raku 的供应中注册不同的事件?

如何在 node /快速服务器上配置 mongoDB

Axios 响应循环通过函数只返回第一个映射对象的结果

图像存储在后端文件夹中,但使用 multer 和 react.js 在前端找不到

如何解决 npm install react-select failure with error : An unknown git error occurred, git@github.com :Permission denied (publickey)

错误:无法检测到网络(event="noNetwork",code=NETWORK_ERROR,version=providers/5.6.8)

在 `DataFrame` 上使用用户定义的可链接函数抽象出 Polars 表达式

类 WebSwapCGLLayer 在 Mac OS X /System 和 node_modules 中都实现了

如何使用 Mocha 测试正常(非 node 特定)JavaScript 函数?

Node_redis - 如何删除密钥?

socket.io 发出回调合适吗?

如何可靠地散列 JavaScript 对象?

对不同对象中的函数使用相同的键时,V8 中的函数调用缓慢

为什么我们要为 Angular 2.0 安装 Node.js?

如何从命令行在 Node.js 上运行 Jasmine 测试

chart.js 无法创建图表:无法从给定项目获取上下文

Express js 阻止 GET /favicon.ico