上传文件的解压缩: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
非常感谢您的帮助
.gz
扩展名和内容类型application/x-gzip
(尽管我们经常使用包含流的内容类型和指示它是g-zipped的另一种方式)。在网络上,它经常被用作内容编码或传输编码(遗憾的是,由于它更接近我们通常想要的,因此不太受支持),以"无形"地减少下载和上传时间(用户认为他们下载的是一个大的HTML页面,但实际上他们下载的却是一个小的GZip)。
Zip是一种压缩一个或多个文件的存档以及有关相对路径的信息的格式。生成的文件通常被赋予.zip
扩展名和内容类型application/zip
(在IANA注册)。
除了名称之外,还有一些明显的相似之处,因为它们都(通常)使用DEFLATE算法,我们可以将GZip的使用与Tar的使用结合起来,创建一个类似于Zip提供给我们的档案,但它们有不同的用途。
你有两个选择:
最简单的(无论如何,从编程的角度来看)是获得一个生成GZip文件的windows工具(Winrar会打开但不会创建它们,但有几十个工具可以创建它们,其中包括相当多的免费工具)。然后你的代码就可以工作了。
另一种是使用Package类。它的使用有点复杂,因为一个可能包含多个文件的包本质上比一个文件更复杂,但无论如何都不可怕。这将允许您检查Zip文件,提取包含的文件,对其进行更改等。