У меня есть раздражающая проблема: Я должен показать PDF в браузере (встроенный дисплей, а не скачать).ASP.NET: Почему у меня есть другой заголовок, который я установил?
До сих пор, с приведенным ниже кодом, он работает в Internet Explorer. Но в google-хром он просто загружается.
На этом же сервере работает стороннее приложение, которое делает то же самое.
Я полагаю, что проблема заключается в «приложении/октете-потоке», который вы видите в заголовке содержимого контента ...
Я нахожу это довольно раздражающим.
Мой код устанавливает содержание типа приложения/PDF, и когда я смотрю на реальные заголовки отправленных, я вижу, что это приложение/октет-поток ...
это происходит потому, mime - это октет-поток вместо приложения/pdf ...
И у меня есть только один вопрос: почему? Зачем ? Зачем ? (Почему он устанавливает октет-поток, а не приложение/PDF, как указано в коде - см. Полный код ниже)
Бонусный вопрос: почему передается кодирование, если я задал Content-Length длину байтового массива?
Самое смешное, она отлично работает на моем локальном сервере разработки, так что это, кажется, что-то делать с пороками IIS> = 7 ...
ASHX:
Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim baPDF As Byte() = GetPdfFromImage(Me.Data)
'context.Response.Write(COR.Tools.JSON.JsonHelper.Serialize(Me.Data(context)))
context.Response.Clear()
'context.Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileName)
context.Response.AddHeader("Content-Disposition", Portal.ASP.NET.GetContentDisposition("Drucken.pdf", "inline"))
context.Response.AddHeader("Content-Length", baPDF.Length.ToString())
' context.Response.ContentType = "application/msword"
' context.Response.ContentType = "application/octet-stream"
' https://superuser.com/questions/219870/how-to-open-pdf-in-chromes-integrated-viewer-without-downloading-it#
' context.Response.ContentType = "text/html"
context.Response.ContentType = "application/pdf"
context.Response.BinaryWrite(baPDF)
context.Response.Flush()
context.Response.End()
End Sub
' COR.ASP.NET.StripInvalidPathChars("") '
Public Shared Function StripInvalidPathChars(str As String) As String
Dim strReturnValue As String = Nothing
If str Is Nothing Then
Return strReturnValue
End If
Dim sb As System.Text.StringBuilder = New System.Text.StringBuilder()
Dim achrInvalidPathChars As Char() = System.IO.Path.GetInvalidPathChars()
For Each cThisChar As Char In str
Dim bIsValid As Boolean = True
For Each cInvalid As Char In achrInvalidPathChars
If cThisChar = cInvalid Then
bIsValid = False
Exit For
End If
Next cInvalid
If bIsValid Then
sb.Append(cThisChar)
End If
Next cThisChar
strReturnValue = sb.ToString()
sb = Nothing
Return strReturnValue
End Function ' StripInvalidPathChars '
Public Shared Function GetContentDisposition(ByVal strFileName As String) As String
Return GetContentDisposition(strFileName, "attachment")
End Function ' GetContentDisposition '
' http://www.iana.org/assignments/cont-disp/cont-disp.xhtml '
Public Shared Function GetContentDisposition(ByVal strFileName As String, ByVal strDisposition As String) As String
' http://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content-disposition-header-in-http '
Dim contentDisposition As String
strFileName = StripInvalidPathChars(strFileName)
If String.IsNullOrEmpty(strDisposition) Then
strDisposition = "inline"
End If
If System.Web.HttpContext.Current IsNot Nothing AndAlso System.Web.HttpContext.Current.Request.Browser IsNot Nothing Then
If (System.Web.HttpContext.Current.Request.Browser.Browser = "IE" And (System.Web.HttpContext.Current.Request.Browser.Version = "7.0" Or System.Web.HttpContext.Current.Request.Browser.Version = "8.0")) Then
contentDisposition = strDisposition + "; filename=" + Uri.EscapeDataString(strFileName).Replace("'", Uri.HexEscape("'"c))
ElseIf (System.Web.HttpContext.Current.Request.Browser.Browser = "Safari") Then
contentDisposition = strDisposition + "; filename=" + strFileName
Else
contentDisposition = strDisposition + "; filename*=UTF-8''" + Uri.EscapeDataString(strFileName)
End If
Else
contentDisposition = strDisposition + "; filename*=UTF-8''" + Uri.EscapeDataString(strFileName)
End If
Return contentDisposition
End Function ' GetContentDisposition '
Это заголовок приложения 3 партии, где Chrome отображает его тонкой
У вас на самом деле есть правильные MIME, установленные на сервере? –
Вы смотрели заголовки в других браузерах - они показывают приложение/pdf? – Paddy
Вы рассмотрели проблему, описанную в этой статье? http://www.codeproject.com/Articles/671592/A-tale-of-ASP-NET-IIS-7-5-chunked-responses-and-ke –