PDF-файл иногда отображается как мусор

У меня есть пользователь, который сообщает, что файлы отображаются в виде необработанных данных в его браузере. Он использует Internet Explorer.

Файлы обслуживаются через файл обработчика .ashx, и он работал до тех пор.

Это соответствующая часть моего обработчика .ashx:

context.Response.Clear()
context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + name)
context.Response.AppendHeader("Content-Length", size.ToString)
context.Response.ContentType = "application/pdf"
context.Response.TransmitFile(fullname)
context.Response.Flush()
HttpContext.Current.ApplicationInstance.CompleteRequest()

Кто-нибудь может что-то понять из этого скриншота? введите здесь описание изображения

Обновление: это поведение появляется в Windows 10 при запуске IE 11 или Edge и только при втором открытии файла. Это происходит как для файлов .pdf, так и для файлов .docx.


person Muleskinner    schedule 15.01.2016    source источник


Ответы (3)


Это код, который я использую для потоковой передачи PDF-файлов клиенту. Это работает в IE 11. Основное отличие состоит в том, что я использую BinaryWrite, который, основываясь на вашем коде, вы можете не захотеть делать.

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("Content-Type", "application/pdf");
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=" + fileName + ".pdf");
HttpContext.Current.Response.BinaryWrite(bytes);
HttpContext.Current.Response.End();

Здесь может быть решение

Мне это тоже понравится на всякий случай..

Согласно в этой ветке можно просто заменить Response.Close на Response.End (или, в вашем случае... добавить)

person terbubbs    schedule 15.01.2016

Наконец-то я сам нашел ответ - это было связано с заголовком HTTP content-length, который я по ошибке отправил со значением ровно на 1 байт больше.

Это вызвало странное поведение только в IE/Edge и только в Windows 10, как описано в OP.

person Muleskinner    schedule 08.04.2016

У меня была такая же проблема со страницей aspx, которая передает файл в браузер в обработчике событий Page_Load. Моя ошибка заключалась в отсутствии

Response.End();

вызов метода. Когда я добавил эту строку, проблема исчезла.

person ka3yc    schedule 07.11.2018