ゆれくるコール開発日誌

ゆれくるコール、あめふるコール、つながるコールや緊急地震速報のことなど

DotNetZipでStreamよりzipデータを読込み、Streamに書き出す方法

zip解凍、圧縮を行ってくれる便利な.NET Framework用ライブラリ"DotNetZip"。
このライブラリを使って、Streamよりzipデータを読込み、Streamに書き出したい。


もう少し具体的にいうと、ASP.NETでPOSTで渡されたzipファイルを解凍して、中身をメモリ上に展開したかった。
ASP.NETでは、POSTされたファイルはHttpPostedFileでアクセスできるので、そいつからStreamで直接データ読み込んでzip解凍し、中身を取り出したかったんだよね。


DotNetZipのサンプルは、zipファイルより解凍しファイルに展開するようなのはいろんなところにたくさんある。
DotNetZipのFAQを見てみると、上記のことはできそうな感じなんだけど、なかなかサンプルコードがみつからない。。
いろいろググって、いくつかのサンプルコードを組み合わせて下記のような感じで実現できました♪

HttpPostedFile file = request.Files["posted_file"]; //"posted_file"はPOST時のkey。適宜読み替えてください。

using (ZipFile zip = ZipFile.Read(file.InputStream))
{
    ZipEntry entry = zip[0]; //zipファイル内のひとつめのzipファイルを取り出し
    using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
    {
        entry.Extract(ms); //MemoryStreamにzipデータを解凍
        ms.Position = 0;

        using (System.IO.StreamReader sr = new System.IO.StreamReader(
                            ms, System.Text.Encoding.GetEncoding("utf-8")))
        {
            string extract_data = sr.ReadToEnd(); //解凍データをstringで取出し
        }
    }
}


だれかの参考になれば!