Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 创建大于4 GiB的zip存档,可通过MacOS存档实用程序打开_Javascript_Node.js_Macos_Zip - Fatal编程技术网

Javascript 创建大于4 GiB的zip存档,可通过MacOS存档实用程序打开

Javascript 创建大于4 GiB的zip存档,可通过MacOS存档实用程序打开,javascript,node.js,macos,zip,Javascript,Node.js,Macos,Zip,我正在尝试动态生成大型zip文件(无需压缩,只需存储文件),并通过restify对其进行流式处理。zip文件的总大小可能超过4 GiB,我使用ZIP64格式运行时遇到了问题,这在MacOS上似乎不受正确支持 我尝试使用和,它们都能够生成zip文件,但我无法通过MacOS中的本机图形工具打开它(例如,在Finder中双击文件)。最奇怪的是,本机的unzip命令行实用程序在这里工作得很好,只是图形存档实用程序不工作 我还尝试使用简单的java实现创建zip,即使使用图形存档实用程序,生成的文件也可以

我正在尝试动态生成大型zip文件(无需压缩,只需存储文件),并通过
restify
对其进行流式处理。zip文件的总大小可能超过4 GiB,我使用ZIP64格式运行时遇到了问题,这在MacOS上似乎不受正确支持

我尝试使用和,它们都能够生成zip文件,但我无法通过MacOS中的本机图形工具打开它(例如,在Finder中双击文件)。最奇怪的是,本机的
unzip
命令行实用程序在这里工作得很好,只是图形存档实用程序不工作

我还尝试使用简单的java实现创建zip,即使使用图形存档实用程序,生成的文件也可以正常工作,因此问题可能出在
节点archiver
/
yazl
库的实现中。我还尝试通过命令行(
zip file.zip-0…files
)创建zip文件,它也可以通过存档实用程序打开

处理这种情况的正确方法是什么?是否有其他节点库可以生成ZIP64格式,并可以通过Archive Utility打开


有必要对zip文件进行流式处理,而不是将其存储在磁盘上。我正在运行最新版本的MacOS sierra(10.12.5测试版)和node 6.9.1

如果有人遇到与我相同的需求,请检查
JSZip
library()。它还可以与节点流一起工作,并且能够生成大于4 GiB的zip文件,这些文件可以通过MacOS Archive Utility打开。唯一的限制是,由于32位CRC32哈希生成,您不能拥有大于4 GiB的文件(但zip文件可以更大)

以下是如何使用此库的一个片段:

const fs = require('fs');
const JSZip = require('jszip');

const files = [...];
const zip = new JSZip();

for (const file of files) {
  zip.file(file.name, fs.createReadStream(file.path));
}

res.header('Content-Type', 'application/zip');
res.header('Content-Disposition', `attachment; filename="${encodeURI(`test.zip`)}"`);
zip.generateNodeStream({streamFiles: true, compression: 'STORE'}).pipe(res);