Проблема загрузки текстового файла обработчика Asp.net http. Прекрасно работает для кода - PullRequest
0 голосов
/ 06 октября 2011

Недавно мы столкнулись со странной проблемой с обработчиком загрузки файлов http, разработанным с использованием C # 4.0.

Веб-приложение разработано с использованием ASP.NET 4.0 и размещено на IIS 7.0 поверх ssl. Это сработало правильно. Но в последнее время из-за некоторых изменений в конфигурации или на сайте мы сталкиваемся с проблемой, перечисленной ниже.

Когда мы загружаем текстовый файл, он выдает ненужные данные. Тот же файл работает нормально, если я использую код на странице aspx вместо обработчика. Оба имеют одинаковый код. Некоторые файлы работают нормально. например, файл изображения или PDF-файл работает нормально. Но с текстовым файлом поведение очень противоречиво. Пустой текстовый файл работает нормально. Я попытался сравнить два ответа (handler vs codebehind), и кажется, что возвращаемая длина содержимого не совпадает.

    context.Response.Clear();
    context.Response.ClearHeaders();
    context.Response.ClearContent();
    context.Response.ContentType = !String.IsNullOrEmpty(mime) ?     mime : "application/octet-stream";
    context.Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}", fileName));
    //context.Response.AppendHeader("Content-Length", buffer.Length.ToString());
    context.Response.OutputStream.Write(buffer, 0, buffer.Length);
    context.Response.End();

Код за

HTTP / 1.1 200 OK Сервер: Сервер разработки ASP.NET / 10.0.0.0 Дата: чт, 06 октября 2011 02:52:26 GMT X-AspNet-версия: 4.0.30319 Содержание-Диспозиция: вложение; filename = my junk.txt Cache-Control: private Content-Type: text / plain Содержание-Длина: 29 Соединение: Закрыть

Это только для образца теста

HttpHandler

HTTP / 1.1 200 OK Сервер: Сервер разработки ASP.NET / 10.0.0.0 Дата: чт, 06 октября 2011 02:54:04 GMT X-AspNet-версия: 4.0.30319 Содержание-Диспозиция: вложение; filename = my junk.txt Cache-Control: private Content-Type: text / plain Content-Length: 146 Подключение: Закрыть

I�%&/m�{J�J��t�� $ @ Ig #) ЕВА] F @ 흼 {{; Н' ? \ Fdl J ɞ! ? ~ |? " yѤ N l ͛6 I

Ответы [ 2 ]

0 голосов
/ 09 декабря 2014

Еще одна вещь, которую вы можете сделать, это заключить имя файла в кавычки.Chrome / Opera не обрабатывают этот код правильно, если имя файла содержит запятую, и считают, что есть дубликаты заголовков ответов.

context.Response.AddHeader("Content-disposition", string.Format("attachment; filename=\"{0}\""), fileName);

См. здесь , здесь и здесь для получения дополнительной информации.

0 голосов
/ 06 октября 2011

Попробуйте использовать AddHeader() вместо AppendHeader() и вызвать Flush() перед context.Response.End() оператором.

...