问题标签 [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.
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 非常友好的包?
- 存档器:https ://www.npmjs.com/package/archiver
- jszip:https ://www.npmjs.com/package/jszip
- 易压缩:https ://www.npmjs.com/package/easy-zip
- expresszip:https ://www.npmjs.com/package/express-zip
- 压缩流: https ://www.npmjs.com/package/zip-stream
我在上面看到的是大多数包首先收集文件,然后将它们最终确定到内存中,然后将它们传送到 http 请求(可能对 5GB 的数据不利,或者我遗漏了什么)。有些似乎能够使用磁盘,但问题是每个文件添加时是否会获取更新事件?
其他人似乎是完全异步的,我看不出在将每个文件添加到 ZIP 包时如何获得运行进度值。
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
这不是我真正想要的。有没有解决的办法?
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"
,它仍然不起作用。
node.js - 如何通过管道连接扩展的 WriteStream?
我是 NodeJS 的新手。我知道我们可以使用 pipe() 方法将数据流式传输到客户端。
这是代码片段
当我使用获取请求时,下载的压缩文件但 没有任何扩展名。我知道它是因为我正在将写入流传输到响应中。反正有没有.zip扩展名的管道?或者如何在不在 HDD 中构建 zip 文件的情况下发送 zip 文件?
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
):
node.js - 云函数响应流
我有一个按需构建 zip 文件的脚本。使用 Cloud Functions Local Emulator 在本地运行良好。部署后,它不会流式传输响应。构建整个 zip 响应,然后发送。我知道发生这种情况是因为正在设置内容长度响应标头,而这并没有在本地发生。
如何让 Cloud Functions 流式传输响应?
node.js - 使用 NodeJs 获取输出 zip 文件的大小
我正在使用NodeJs
(expressJs)和archiver
模块将 zip 文件流式传输到客户端,因此最终的 ZIP 文件在服务器存储(streaming zip serving
)中不存在,但问题是我无法获得输出文件的大小,因为 zip过程实时发生。
代码 :
node.js - 使用 Express 和 Archiver 将 Zip 文件从服务器发送到客户端浏览器
我是 Node 的初学者,我试图弄清楚如何在服务器上创建一个 zip 文件,然后将其发送到客户端,然后将 zip 文件下载到用户的浏览器。我正在使用 Express 框架,并且正在使用 Archiver 来实际进行压缩。我的服务器代码如下,取自Dynamically create and stream zip to client
所以它压缩两个文本文件并返回结果。在客户端,我在服务中使用以下函数来实际调用该端点
然后我有另一个函数调用downloadZip()
并实际将 zip 文件下载到用户的本地浏览器。
当testfunc()
被调用时,一个 zip 文件会下载到用户的浏览器,但是当我尝试解压缩它时,它会创建一个 zip.cpgz 文件,然后在无限循环中单击该文件时会变成一个 zip 文件,这表明发生了某种损坏。谁能看到我在这里出错的地方?
javascript - Npm Archiver 替换压缩文件夹中的文件
下面是我的api。
在上面的 api 调用中,我正在压缩项目文件夹(在 npm 中使用存档器),当调用downloadProject时,我需要在浏览器中下载该文件夹。
在下面的行中,我试图在压缩时pom.xml
用我的本地文件替换 。pom.xml
但我无法做到这一点。这是复制pom.xml
文件。
原件和复制件都留在文件夹中。
任何人都可以请帮忙。提前致谢。
node.js - 在 NodeJS 中使用归档器压缩音频文件
我使用 node-youtube-dl 有一个流来下载视频,我想使用 fluent-ffmmpeg 将其转换为 mp3。我也想压缩这个 mp3 音频发送给客户端下载,但我不知道如何压缩 mp3 音频。我找到了 StackOverflow 的每个角落,但没有找到任何解决方案。请帮我!谢谢
如果你能帮助我,我真的很感激!再次感谢