2016-01-15 6 views
0

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

Файлы обрабатываются через файл обработчика .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() 

Может кто-нибудь понять что-то из этого скриншота? enter image description here

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

ответ

1

Я, наконец, нашел ответ сам - он имел отношение к HTTP hea der content-length, который я ошибочно представил со значением, равным 1 байту слишком большим.

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

1

Это код, который я использую для потоковой передачи 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(); 

There might be a solution here

I'll like this as well just in case..

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