首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建大于4 GiB的压缩存档,可以通过MacOS存档实用程序打开

创建大于4 GiB的压缩存档,可以通过MacOS存档实用程序打开
EN

Stack Overflow用户
提问于 2017-05-11 12:14:18
回答 1查看 770关注 0票数 0

我试图动态生成大型压缩文件(不需要压缩,只需存储文件),并通过restify进行流。压缩文件总共可以大于4 GiB,我使用的是ZIP64格式,在MacOS上似乎不支持这种格式。

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

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

处理这种情况的正确方法是什么?是否还有其他节点库可以生成可以通过存档实用程序打开的ZIP64格式?

必须对zip文件进行流处理,而不是将其存储在磁盘上。我正在运行最新版本的MacOS塞拉利昂(10.12.5测试版)和节点6.9.1。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-21 17:38:34

如果有人像我一样努力满足相同的需求,请检查JSZip库(https://stuk.github.io/jszip/)。它还可以与节点流一起工作,并能够生成大于4 GiB的压缩文件,这些文件可以通过MacOS存档实用程序打开。唯一的限制是,您的文件不能大于4 GiB,因为32位CRC32哈希生成(但压缩文件可以更大)。

下面是如何使用这个库的一个片段:

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43915104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档