3

これは私のコードです

    private void sendToClient(Dictionary<string, string> reportDic)
    {
        Response.Clear();
        Response.BufferOutput = false;
        String ReadmeText = "some text";
        Response.ContentType = "application/zip";
        Response.AddHeader("content-disposition", "filename=" + "filename.zip");
        using (ZipFile zip = new ZipFile())
        {
            zip.AddEntry("Readme.txt", ReadmeText);
            zip.Save(Response.OutputStream);
        }
        Response.Close();
    }

この時点で、zip内にreadme.txtドキュメントが含まれ、ドキュメント内に「sometext」という単語が含まれるzipファイルを返そうとしています。

私が取得するのは、filename.zip(expected)という名前のzipファイルで、ドキュメントreadme.txt(expected)があり、ドキュメント内にテキストがありません(unexpected)。

このコードは、ここの例からほぼ逐語的です。これは、他の人がこの正確な問題に遭遇したことを私にさせます。

私の最終目標は、このようなことをすることです。

    private void sendToClient(Dictionary<string, string> reportDic)
    {
        Response.BufferOutput = false;
        Response.ContentType = "application/zip";
        Response.AddHeader("content-dispostion", "filename=text.zip");
        Response.ContentEncoding = Encoding.Default;
        Response.Charset = "";
        using (ZipFile zip = new ZipFile())
        {
            foreach (string key in reportDic.Keys)
            {
                zip.AddEntry(key, reportDic[key]);
            }
            zip.Save(Response.OutputStream);
        }
        Response.Close();
    }

3つの文字列をファイルとしてzipファイルに追加しますが、ここでは例を機能させることにします。

誰か提案がありますか?

ありがとう

--UPDATE--これは機能するはずです。実際、新しいプロジェクトにコピーすると、宣伝どおりに機能します。プロジェクトにdllの有毒な組み合わせや破損が含まれている必要があります。これは、あいまいか何かです。素晴らしい。

4

3 に答える 3

1

ヒント:

使用しないでください

HttpContext.Current.ApplicationInstance.CompleteRequest();    

代わりに、

Response.Close();

前者を使用すると、zip ファイルの下部に HTML ジャンクが追加されます。

于 2009-09-10T18:55:23.070 に答える
0

AddFile メソッドにダミー テキストを入れてみましたか = これは必須だと思います。

于 2009-07-20T11:42:20.487 に答える
0

CodePlex でリンクした例は、AddEntryメソッドがストリームからデータを読み取ると言っているようです。文字列を渡しているだけです - を作成StringReaderして ReadmeText 文字列を確認し、代わりにこれを渡すことはできますか?

于 2009-07-20T12:05:38.067 に答える