从zip存档中提取gzip文件

时间:2020-10-19 11:24:21

标签: zip gzip deflate

我们正在创建一个Web服务,您可以在其中上传一个zip文件(有时从100MB到1GB很大),然后将其内容通过http提供。

内容通过静态gzip压缩提供。据我了解,gzip本质上是一些头文件+放气文件。 Zip还是一些元信息+多个可选压缩的流,其中一些通常也会压缩。

我担心我们在那儿进行不必要的往返。解压缩zip-然后使用gzip压缩每个文件。从理论上讲,我们可以只压缩deflate块中的zip文件,添加一些头文件,瞧,我们拥有.gzip压缩文件,而无需进行实际压缩,但这听起来像其他人已经做了。所以我的问题是:

是否有用于Linux的命令行工具或用于Ruby / Node.js / C ++的库,如果给定一个.zip文件,它将创建一个包含其内容以及这些内容的.gzip版本的文件夹,而无需进行不必要的重新压缩?

1 个答案:

答案 0 :(得分:1)

由于我没有审查或测试过免责声明,zip2gz是在github上发布的Python项目,用于从ZIP文件中提取压缩数据块而不进行解压缩。特别是,对于以“ deflate”压缩方式存储的文件,“ 将使用原始的deflate数据并在其周围加上gzip标头和页脚”。

将代码转换为另一种语言应该很简单,除了可能import zipfile依赖关系之外,该依赖关系必须重新映射到目标语言的zip库/支持(尽管实际使用的唯一部分)关于ZIP标头和中央目录,而不是任何un / compression)。

有关在C语言中进行反向转换(从gzip转换为单项zip文件)而无需重新/压缩并且没有任何外部库的示例,请参阅Mark Adler的answerAdd .gz file to .zip archive without decompressing and re-compressing?