Отправка сжатого ответа в ASP.NET - PullRequest
1 голос
/ 19 июня 2009

Я использую веб-сайт на IIS6 для приложения ASP.NET и включил сжатие, которое отлично работает для веб-страниц .aspx.

Что не работает, так это загруженные двоичные файлы, которые передаются как часть ответа обратной передачи: например, Кнопка ссылки «скачать в Excel» - пользователь щелкает, и код генерирует двоичный файл, выполняет Response.Clear () и затем записывает файл в Response.OutputStream.

Ответ просматривается браузерами, но он всегда равен нулю байтов. Поэтому я предполагаю, что веб-браузеры ожидают сжатый ответ, и, поскольку необработанный двоичный файл не является допустимым сжатым потоком, он завершается ошибкой. Я озадачен, почему так должно быть, если я очистил ответ - наверняка заголовки ответа (с указанием сжатия) также очищены?

Таким образом, возникает два вопроса:

1) как сжать двоичный файл для отправки сжатого ответа? 2) как я могу проверить во время выполнения, чтобы увидеть, включено ли сжатие IIS?

Приветствия

1 Ответ

3 голосов
/ 19 июня 2009

Я бы отключил сжатие и проверил, работает ли оно по-прежнему, просто чтобы выделить тот факт, что это действительно происходит из-за сжатия IIS. Я говорю вам, потому что у меня работает сайт с поддержкой IIS / Compression, который без проблем предоставляет файлы PDF (двоичные файлы).

В любом случае, вот та часть кода, которая работает для меня.

 Response.Clear();
 Response.ClearHeaders();

 Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
 Response.AddHeader("Content-Length", fileInfo.Length.ToString());
 Response.AddHeader("Content-transfer-encoding", "8bit");
 Response.AddHeader("Cache-Control", "private");
 Response.AddHeader("Pragma", "cache");
 Response.AddHeader("Expires", "0");  

 Response.ContentType = "application/pdf";
 Response.WriteFile(filePath);

 Response.Flush();
 Response.Close();
 HttpContext.Current.ApplicationInstance.CompleteRequest();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...