问题标签 [node-archiver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1807 浏览

node.js - 使用大型 ZIP 包的 Node Express 的 Zip 创建过程

目标

我们建立了一个低容量站点,用户(浏览器客户端)将在其中选择图像文件(每个文件 284 KB),然后请求 Node Express 服务器将它们捆绑到 ZIP 中以下载到 Web 客户端。

问题和设计约束

  • 生成的 ZIP 可能约为 50 MB - 5 GB。因此,我们希望在构建 ZIP 时为用户提供一个正在运行的进度条。(我们假设浏览器将提供有关实际下载进度的运行更新)。
  • 虽然我们预计请求量很少(一次 1-2 个请求)。但是,我们不想完全占用我们的 4 核服务器处理器,因此我们希望尽量减少占用快速服务器的同步调用。
  • 鉴于 ZIP 的大小,我们不能期望 zip 仅在内存中组装
  • 还有其他我们需要担心的问题吗?

问题

我们假设将 7zip 作为子进程运行是不好的,因为我们不会得到任何关于有多少 258KB 文件已添加到 ZIP 的运行状态。

那么考虑到上面列出的设计约束/目标,以下哪些包是对 Node/ExpressJS 非常友好的包?

我在上面看到的是大多数包首先收集文件,然后将它们最终确定到内存中,然后将它们传送到 http 请求(可能对 5GB 的数据不利,或者我遗漏了什么)。有些似乎能够使用磁盘,但问题是每个文件添加时是否会获取更新事件?

其他人似乎是完全异步的,我看不出在将每个文件添加到 ZIP 包时如何获得运行进度值。

0 投票
1 回答
521 浏览

node.js - Windows中目录路径的nodejs zip存档器问题

zip.directory在 Windows 中使用时遇到问题。

这是我要创建的文件结构:

. ├── file1.txt ├── file2.txt └── file3.txt

file2.txt并且file3.txt来自一个名为dir.

这是我在服务器上的代码:

这在 Mac 上运行良好。但是,使用'.'将所有内容放在同一目录中似乎在 Windows 上不起作用(基本上只file1.txt将其放入 zip 中)。

但是,以下内容确实有效:

但是,这给出了这样的文件夹结构:

. ├── file1.txt └── somename ├── file2.txt └── file3.txt

这不是我真正想要的。有没有解决的办法?

0 投票
2 回答
12244 浏览

javascript - 正确的标题,但 Chrome 显示“资源解释为文档”

我读了很多这样的问题,但我真的无法弄清楚......

我使用归档器表达Node.js 模块。我想简单地向客户端发送一个 zip 文件。我的代码大致如下:

收到请求后,zip 文件会正确传输,但 Chrome 会抱怨:

资源被解释为 Document 但使用 MIME 类型 application/zip 传输

如果我做一些愚蠢的事情,比如将内容类型设置为text/json,我会得到:

资源解释为 Document,但使用 MIME 类型 text/json 传输

所以很明显,我在 Node.js 中设置的是做它的工作,而其他的事情就是问题所在。它说资源是使用 MIME 类型 applicatioin/zip 传输的,但被解释为 Document。

如何使它不解释为文档?


另外,我尝试了这些设置内容类型的方法:

但我得到了同样的结果。

另一方面,Mozilla 不会抱怨任何事情。对类似问题的一些答案表示可以忽略此警告。我也应该忽略它吗?问题可能是存档直接通过管道传输到响应对象吗?虽然(我重复一遍),但 zip 已成功发送。

编辑:

设置Content-Disposition也不起作用:

我还使用 an<iframe>来发起请求:

原因是因为我不想要页面重定向。我能做到的唯一方法就是这样。

编辑:

更改我的 Chrome 设置这个答案指出的方式也不起作用。

编辑:

这个答案说这是因为<iframe>. 如果我通过简单<form>的 with提出请求action="/archive",它仍然不起作用。

0 投票
2 回答
495 浏览

node.js - 如何通过管道连接扩展的 WriteStream?

我是 NodeJS 的新手。我知道我们可以使用 pipe() 方法将数据流式传输到客户端。

这是代码片段

当我使用获取请求时,下载的压缩文件但 没有任何扩展名。我知道它是因为我正在将写入流传输到响应中。反正有没有.zip扩展名的管道?或者如何在不在 HDD 中构建 zip 文件的情况下发送 zip 文件?

0 投票
1 回答
335 浏览

javascript - 如何在目录中归档日志文件时排除当前日志文件

我必须归档一个存在日志文件的目录(文件名的格式为i.e 2017-12-06.log)。我必须归档除2017-12-06.log.

我有一个所有日志文件都存在的日志目录和一个脚本create-zip.js。当我使用 运行以下脚本时node create-zip.js,它会创建目录/archive/<year>/<month_name>并保存在此处logs.zip文件夹。

一切都很好,除了当我提取时logs.zip,我的存档日志文件在里面/archive/<year>/<month_name>/home/hotam/nodejs_archive_example/logs,但我想要这些文件在里面/archive/<year>/<month_name>。我google了很多,但找不到解决方案。提前致谢。

我有以下脚本(create-zip.js):

0 投票
1 回答
2032 浏览

node.js - 云函数响应流

我有一个按需构建 zip 文件的脚本。使用 Cloud Functions Local Emulator 在本地运行良好。部署后,它不会流式传输响应。构建整个 zip 响应,然后发送。我知道发生这种情况是因为正在设置内容长度响应标头,而这并没有在本地发生。

如何让 Cloud Functions 流式传输响应?

0 投票
1 回答
1381 浏览

node.js - 使用 NodeJs 获取输出 zip 文件的大小

我正在使用NodeJs(expressJs)和archiver模块将 zip 文件流式传输到客户端,因此最终的 ZIP 文件在服务器存储(streaming zip serving)中不存在,但问题是我无法获得输出文件的大小,因为 zip过程实时发生。

代码 :

0 投票
0 回答
2122 浏览

node.js - 使用 Express 和 Archiver 将 Zip 文件从服务器发送到客户端浏览器

我是 Node 的初学者,我试图弄清楚如何在服务器上创建一个 zip 文件,然后将其发送到客户端,然后将 zip 文件下载到用户的浏览器。我正在使用 Express 框架,并且正在使用 Archiver 来实际进行压缩。我的服务器代码如下,取自Dynamically create and stream zip to client

所以它压缩两个文本文件并返回结果。在客户端,我在服务中使用以下函数来实际调用该端点

然后我有另一个函数调用downloadZip()并实际将 zip 文件下载到用户的本地浏览器。

testfunc()被调用时,一个 zip 文件会下载到用户的浏览器,但是当我尝试解压缩它时,它会创建一个 zip.cpgz 文件,然后在无限循环中单击该文件时会变成一个 zip 文件,这表明发生了某种损坏。谁能看到我在这里出错的地方?

0 投票
0 回答
226 浏览

javascript - Npm Archiver 替换压缩文件夹中的文件

下面是我的api。

在上面的 api 调用中,我正在压缩项目文件夹(在 npm 中使用存档器),当调用downloadProject时,我需要在浏览器中下载该文件夹。

在下面的行中,我试图在压缩时pom.xml用我的本地文件替换 。pom.xml

但我无法做到这一点。这是复制pom.xml文件。

原件和复制件都留在文件夹中。

任何人都可以请帮忙。提前致谢。

0 投票
0 回答
137 浏览

node.js - 在 NodeJS 中使用归档器压缩音频文件

我使用 node-youtube-dl 有一个流来下载视频,我想使用 fluent-ffmmpeg 将其转换为 mp3。我也想压缩这个 mp3 音频发送给客户端下载,但我不知道如何压缩 mp3 音频。我找到了 StackOverflow 的每个角落,但没有找到任何解决方案。请帮我!谢谢

如果你能帮助我,我真的很感激!再次感谢