Отправка Zip-файла Клиенту через Ответ с помощью DotNetZip

StackOverflow https://stackoverflow.com/questions/1153047

Вопрос

это мой код

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

То, что я получаю, - это почтовый файл с именем 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-файл, но пока я довольствуюсь тем, что пример работает.

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

Спасибо

--ОБНОВЛЕНИЕ-- Это должно сработать, на самом деле, если я скопирую это в новый проект, это будет работать точно так, как рекламируется, у меня, должно быть, токсичная смесь DLL-файлов или какое-то повреждение в моем проекте, которое неясно или что-то в этом роде.Замечательно.

Это было полезно?

Решение

подсказка:

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

HttpContext.Current.ApplicationInstance.CompleteRequest();    

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

Response.Close();

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top