zip - 从 zip 存档中提取 gzip 文件
问题描述
我们正在创建一个 Web 服务,您可以在其中上传一个 zip 文件(有时 100MB 到 1GB 很大),然后通过 http 提供其内容。
内容通过静态 gzip 压缩提供。据我了解gzip本质上是一些标题+放气。Zip 也是一些元信息 + 多个可选压缩流,其中一些通常也是放气的。
我担心我们在那里做不必要的往返。解压缩 zip - 然后使用 gzip 压缩每个文件。从理论上讲,我们可以将 zip 切片为 deflate 块,添加一些标题,瞧,我们有 .gzip 压缩文件,而无需进行实际压缩,但这听起来像是其他人已经做过的事情。所以我的问题是:
是否有一些用于 Linux 的命令行工具或用于 Ruby/Node.js/C++ 的库,给定一个 .zip 文件将创建一个包含其内容的文件夹以及这些内容的 .gzip 压缩版本,而无需进行不必要的重新压缩?
解决方案
使用我没有审查或测试过的免责声明,zip2gz
是一个发布在 github 上的 Python 项目,用于从 ZIP 文件中提取压缩数据 blob 而无需解压缩。特别是,对于使用“deflate”压缩存储的文件,“它将获取原始的 deflate 数据并在其周围添加 gzip 页眉和页脚”。
将代码翻译成另一种语言应该很简单,除了可能import zipfile
必须重新映射到zip
目标语言的库/支持的依赖项(尽管实际使用的唯一部分是关于 ZIP 标头和中央目录,而不是任何 un/压缩)。
对于在 C 中进行反向转换(从 gzip 到单项 zip 文件)而不重新/压缩且没有任何外部库的 C 示例,请参阅 Mark Adler对Add .gz file to .zip archive without decompressing and re-compressing?的回答?.
推荐阅读
- compiler-errors - 在 SAS 中使用部分关键字提取完整关键字
- javascript - 无法使用 Axios React Django 从数据库中删除记录
- javascript - CRUD 中的删除不起作用。knex.js,mysql
- active-directory - 跨整个目录的 net 用户命令
- javascript - 将一个 JS 文件用于多个 HTML 文件时出错
- android - 在PNG周围绘制彩色圆圈
- visual-studio-code - 如何在vscode中展开peek问题窗口
- javascript - 使用 node-downloader-helper 下载文件
- mysql - MySQL 触发器问题 - 它工作正常吗?
- postgresql - 复合主键和慢查询