2017-01-04 5 views
0

Я обработчик ASHX, который отображает в браузере в формате PDF из бинарных данных, я использую .NET Framework 4.0, IIS 6 и Chrome браузер:PDF сохранены как ASPX/ASHx над HTTPS

 Dim s As System.IO.MemoryStream = HttpContext.Current.Session("tmp_binaryData") 
     s.Seek(0, System.IO.SeekOrigin.Begin) 

     With HttpContext.Current.Response 
      .ClearContent() 
      .ClearHeaders() 
      .ContentType = "application/pdf" 
      .AddHeader("Content-Disposition", "inline; filename='test.pdf'") 
      .BinaryWrite(s.ToArray) 
      .Flush() 
     End With 

При доступе от HTTPS, и пользователь пытается сохранить файл (нажав кнопку сохранения на панели инструментов просмотра PDF), файл сохраняется как ashx, а не pdf. Этого не происходит, если веб-приложение доступно из HTTP (порт 80).

Стоит отметить, что если я изменю ContentType на «attachment/pdf», файл будет автоматически сохранен как PDF правильно.

Я использовал все виды комбинаций заголовков без каких-либо успехов, отключил просмотр PDF в формате PDF, попробовал Adobe Reader, проверял параметр сжатия файлов на IIS, проверенные типы MIME, просто чтобы перечислить некоторые.

В качестве дополнительной информации я использую этот те же самые теги на другом веб-приложении, размещенном на IIS7, на другом сервере, и проблемы нет, поэтому у него есть что-то с конфигурацией IIS 6.

UPDATE Jan/05/2017

я загрузил пробную PDF из файла через Response.Redirect("test.pdf") на производственном сервере и файл успешно экономит на Chrome. Так, я сравнил заголовки обоих методов отображения:

Response.Redirect() Метод:

headers=" 
Accept-Ranges: bytes 
Content-Length: 696505 
Content-Type: application/pdf 
Date: Thu, 05 Jan 2017 18:05:09 GMT 
ETag: "33dad7f8baccd11:11a1" 
Last-Modified: Wed, 22 Jun 2016 19:19:18 GMT 
Server: Microsoft-IIS/6.0 
X-Powered-By: ASP.NET" 

обработчика ASHX (filestram) Метод:

headers=" 
Cache-Control: private 
Content-Disposition: inline; filename='Prueba.pdf' 
Content-Type: application/pdf 
Date: Thu, 05 Jan 2017 18:09:58 GMT 
Server: Microsoft-IIS/6.0 
Transfer-Encoding: chunked 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET" 

Я заметил, что в методе ASHX отсутствуют заголовки «Accept-Ranges» и «Content-Lenght», но он привлек мое внимание, что он имеет заголовок «Transfer-Encoding: chunked». Считаете ли вы, что это может вызвать проблему? Я попытаюсь воспроизвести первые заголовки методов на ASHX.

ответ

0

Ну, я должен был создать файл PDF физически на сервере, а затем отправить его в браузер клиента с Response.Redirect():

Dim s As System.IO.MemoryStream = HttpContext.Current.Session("tmp_binaryData")    
Dim serverPath As String = "~/temp/" 

System.IO.File.WriteAllBytes(HttpContext.Current.Server.MapPath(serverPath + HttpContext.Current.Session("tmp_fileName")), s.ToArray()) 
HttpContext.Current.Response.Redirect((serverPath + HttpContext.Current.Session("tmp_fileName"))) 

Эти сгенерированные файлы должны быть удалены, когда сеанс заканчивается или истекает, что может быть сделано в Global.asax.

Другой рабочий стол будет использовать оригинальный метод (писать байты в браузер), и вместо нажатия на значок сохранения пользователь нажимает кнопку печати, а затем сохраняет файл PDF.

 Смежные вопросы

  • Нет связанных вопросов^_^