上传文件的解压缩:GZip头中的幻数不正确.请确保您正在传递GZip流

本文关键字:GZip 确保 不正确 解压缩 文件 | 更新日期: 2023-09-27 18:21:38

我通过FileUpload控件将zip文件(用winrar压缩)上传到我的服务器。在服务器上,我使用以下代码解压缩文件:

HttpPostedFile myFile = FileUploader.PostedFile;
            using (Stream inFile = myFile.InputStream)
            {
                using (GZipStream decompress = new GZipStream(inFile, CompressionMode.Decompress))
                {
                    StreamReader reader = new StreamReader(decompress);
                    string text = reader.ReadToEnd(); // Here is an error
                }
            }

但我得到错误:

GZip标头中的幻数不正确。确保您正在传递GZip流

有什么办法修理这个吗?我正在使用.net 2.0

非常感谢您的帮助

上传文件的解压缩:GZip头中的幻数不正确.请确保您正在传递GZip流

ZIP和GZIP并不完全相同。您可以使用像#ziplib这样的第三方库来解压缩ZIP文件。 GZip是一种将给定流压缩为另一个流的格式。当与文件一起使用时,它通常被赋予.gz扩展名和内容类型application/x-gzip(尽管我们经常使用包含流的内容类型和指示它是g-zipped的另一种方式)。在网络上,它经常被用作内容编码或传输编码(遗憾的是,由于它更接近我们通常想要的,因此不太受支持),以"无形"地减少下载和上传时间(用户认为他们下载的是一个大的HTML页面,但实际上他们下载的却是一个小的GZip)。

Zip是一种压缩一个或多个文件的存档以及有关相对路径的信息的格式。生成的文件通常被赋予.zip扩展名和内容类型application/zip(在IANA注册)。

除了名称之外,还有一些明显的相似之处,因为它们都(通常)使用DEFLATE算法,我们可以将GZip的使用与Tar的使用结合起来,创建一个类似于Zip提供给我们的档案,但它们有不同的用途。

你有两个选择:

最简单的(无论如何,从编程的角度来看)是获得一个生成GZip文件的windows工具(Winrar会打开但不会创建它们,但有几十个工具可以创建它们,其中包括相当多的免费工具)。然后你的代码就可以工作了。

另一种是使用Package类。它的使用有点复杂,因为一个可能包含多个文件的包本质上比一个文件更复杂,但无论如何都不可怕。这将允许您检查Zip文件,提取包含的文件,对其进行更改等。