Отправка Zip-файла Клиенту через Ответ с помощью DotNetZip
Вопрос
это мой код
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 и передать это вместо этого?