c# - 如果 gzip 文件是通过组合多个 gzip 文件创建的,Chrome 不会解压缩 gzip 文件

标签 c# google-chrome gzip gzipstream

我正在创建两个 gzip 文件,一个只包含一个 gzip 成员,而第二个包含 2 个 gzip 成员(两个文件连接成一个 gzip 文件)。

当我尝试通过网络服务器下载此文件时,chrome 会很好地解压缩第一个文件并按原样显示内容。

但在下载第二个文件时,chrome 似乎只解压了第一个文件,而第二个文件未压缩。

我尝试使用 7zip 打开第二个文件并验证内容没有问题。

下面是我用 C# 生成这两个文件的代码

FileStream fileStream = new FileStream("D:\\single_big_gzip.gz", FileMode.Create);
FileStream fileStream2 = new FileStream("D:\\multiple_gzip_files.gz", FileMode.Create);

// Write to First file
GZipStream gzipStream = new GZipStream(fileStream, CompressionMode.Compress, false);
StreamWriter writer = new StreamWriter(gzipStream);
writer.WriteLine("hello world!");
writer.Flush();
gzipStream.Close();
fileStream.Close();

// write to second file
gzipStream = new GZipStream(fileStream2, CompressionMode.Compress, true);
writer = new StreamWriter(gzipStream);
writer.WriteLine("Hello world!");
writer.Flush();
gzipStream.Close();

gzipStream = new GZipStream(fileStream2, CompressionMode.Compress, true);
writer = new StreamWriter(gzipStream);
writer.WriteLine("Bye Bye Birdie!");
writer.Flush();
gzipStream.Close();
fileStream2.Close();

知道如何让 chrome 解压缩整个第二个文件吗?

谢谢。

最佳答案

虽然RFC 1952指定“一个 gzip 文件由一系列“成员”(压缩数据集)组成。”,虽然 gzip 可以正确解码此类流,但浏览器通常不符合标准,只会解码第一个成员。

关于c# - 如果 gzip 文件是通过组合多个 gzip 文件创建的,Chrome 不会解压缩 gzip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29421546/

相关文章:

linux - 单独 Gzip 多个文件并保留原始文件

c# - 在 c#' processstartinfo 中运行命令行

c# - 模拟 Web 服务调用时的测试类型

android - Android/iOS 应用程序内浏览器上的证书固定

ajax - cloudflare 可以添加自定义 header 吗?

c - 在不创建临时文件的情况下打开 gzip 文件以在 C 中读取

nginx - 如果 proxy_pass 响应中存在 etag,则禁用 gzip

c# - 使用正则表达式替换 QueryString 值

c# - Entity Framework |错误 : InvalidCastException: The field of type System. Int32 必须是字符串、数组或 ICollection 类型

google-chrome - Chrome、Canary 和 Chromium 之间有什么区别?