如何提取从HttpWebResponse收到的压缩文件?

我将url放到浏览器的地址栏中,然后将zip文件下载到HD。 压缩文件的大小为386字节,在其属性中写入。

当我使用UnZipFiles方法提取文件时 – 它的工作原理。 但是,我想下载programaticaly并将其提取到内存中。 我使用GetResultFromServer方法来获取压缩内容。 如标题所示,内容的大小与HD上保存的压缩文件的大小相同:

 content-disposition: attachment; filename=emaillog-xml.zip Content-Length: 386 Cache-Control: private Content-Type: application/zip Date: Mon, 10 Sep 2012 08:28:28 GMT Server: Microsoft-IIS/7.5 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET 

我的问题是如何提取GetResultFromServer返回的内容? 我尝试了以下方法:

 var ms = new MemoryStream(Encoding.Unicode.GetBytes(res)) var s = new ZipInputStream(ms); 

但是我Unable to read from this stream

更新

我试过var zipStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), CompressionMode.Decompress)但我得到The magic number in GZip header is not correct错误

 private string GetResultFromServer(ElasticLogParams elasticLogParams) { var webRequest = (HttpWebRequest)WebRequest.Create(url); var response = webRequest.GetResponse(); using (var reader = new StreamReader(response.GetResponseStream())) { var res = reader.ReadToEnd(); var headers = response.Headers.ToString(); return res; } } public static void UnZipFiles(string zippedFilePath, Stream stream = null) { var s = new ZipInputStream(stream ?? File.OpenRead(zippedFilePath)); ZipEntry theEntry; while ((theEntry = s.GetNextEntry()) != null) { using (var streamWriter = File.Create(@"D:\extractedXML.xml")) { var size = 2048; var data = new byte[size]; while (true) { size = s.Read(data, 0, size); if (size > 0) { streamWriter.Write(data, 0, size); } else { break; } } streamWriter.Close(); } } s.Close(); } 

给这个镜头:

 var response = webRequest.GetResponse() as HttpWebResponse; var stream = response.GetResponseStream(); var s = new ZipInputStream(stream); 

我相信你非常接近并且你正在使用正确的方法 – 你可以使用这篇文章来支持它 – 它们的代码非常相似。

我正在使用http://dotnetzip.codeplex.com/我没有用它来下载东西,而是提取人们上传到我服务器的东西。 我认为它也应该完全相反。

我也尝试过微软的内置拉链,但也有问题。 所以我放弃了并且切换了。