Отправка Zip-файла клиенту с помощью ответа с помощью DotNetZip - PullRequest
3 голосов
/ 20 июля 2009

это мой код

    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 внутри zip со словами «некоторый текст» внутри документа.

Я получаю zip-файл с именем filename.zip (ожидается) с документом readme.txt (ожидается) без текста внутри документа (неожиданно).

Этот код почти дословно из примера здесь . Это заставляет меня думать, что другие люди столкнулись с этой проблемой.

Моя конечная цель - сделать что-то подобное.

    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();
    }

добавьте три строки в виде файлов в zip-файл, но я согласен с тем, что пример пока работает.

У кого-нибудь есть предложения?

Спасибо

- UPDATE-- Это должно сработать, на самом деле, если я скопирую его в новый проект, он работает так же, как рекламируется, у меня должна быть токсичная смесь dll или некоторой коррупции в моем проекте, которая неясна или что-то в этом роде. Замечательно.

Ответы [ 3 ]

1 голос
/ 10 сентября 2009

подсказка:

не используйте

HttpContext.Current.ApplicationInstance.CompleteRequest();    

вместо этого используйте

Response.Close();

Если вы используете первый, вы получите HTML-мусор, добавленный в конец вашего zip-файла.

0 голосов
/ 20 июля 2009

Пример, на который вы ссылались в CodePlex, говорит, что метод AddEntry считывает данные из потока. Вы просто передаете строку - может быть, вы могли бы попытаться создать StringReader, чтобы посмотреть на строку ReadmeText, и вместо этого передать ее?

0 голосов
/ 20 июля 2009

Вы пытались вставить метод AddFile с каким-то фиктивным текстом = я думаю, что это необходимо.

...