ブラウザのアドレスバーに配置url
すると、zipファイルがHDにダウンロードされます。zipファイルのサイズは、プロパティに記述されているように386バイトです。
メソッドを使用UnZipFiles
してファイルを抽出すると、機能します。しかし、プログラムでダウンロードしてメモリに抽出したいと思います。メソッドを使用GetResultFromServer
してzip形式のコンテンツを取得します。ヘッダーに示されているように、コンテンツのサイズはHDに保存されたzipファイルのサイズと同じです。
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();
}