Я динамически генерирую Zip-файл на странице ASP.NET и затем отправляю поток в Response.
В Firefox я могу загрузить файл с именем Images.zip
. Работает правильно. В Internet Explorer 7 он пытается загрузить файл с именем ZipExport.aspx
или, если он находится в универсальном обработчике, ZipExport.ashx
и сообщает, что его невозможно найти на сервере, и он не работает.
Вот мой код:
Response.BufferOutput = true;
Response.ClearHeaders();
Response.ContentType = "application/octet-stream";
Response.AddHeader("content-disposition", "attachment; filename=Images.zip");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoServerCaching();
Response.Cache.SetNoStore();
Response.Cache.SetMaxAge(System.TimeSpan.Zero);
ZipFile zip = new ZipFile();
zip.AddFile(Server.MapPath("sample1.png"));
zip.Save(Response.OutputStream);
Я не хочу создавать HTTPHandler для определенного файла и регистрировать его в IIS.
Есть что-то простое, что я упускаю или Internet Explorer виноват в том, что проигнорировал мой заголовок размещения контента?
Редактировать: я удалил эти строки и все заработало:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Редактировать: Вот рабочий код, если кому-то интересно:
public void ProcessRequest(HttpContext context)
{
context.Response.Clear();
context.Response.BufferOutput = false;
context.Response.ContentType = "application/octet-stream";
context.Response.AddHeader("content-disposition",
"attachment; filename=ChartImages.zip");
context.Response.Cache.SetNoServerCaching();
context.Response.Cache.SetMaxAge(System.TimeSpan.Zero);
using(ZipFile zip = new ZipFile())
{
zip.AddFile(context.Server.MapPath("sample1.png"));
zip.Save(context.Response.OutputStream);
}
context.ApplicationInstance.CompleteRequest();
}