我有一個瀏覽器上顯示從二進制數據PDF一個ASHX處理程序中,我使用的.NET Framework 4.0,IIS 6和Chrome瀏覽器:PDF
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)訪問Web應用程序,則不會發生這種情況。
值得一提的是,如果我將ContentType更改爲「attachment/pdf」,則該文件將自動保存爲PDF。
我已經使用了各種標題組合,沒有成功,禁用了Chrome的PDF查看器,嘗試過Adobe Reader,在IIS上檢查了文件壓縮選項,驗證過MIME類型,僅列出了一些。
作爲附加信息,我在另一臺服務器上的IIS7上託管的另一個Web應用程序上使用了相同的技術,並且問題不存在,所以它與IIS 6配置有關。
UPDATE月/ 05/2017年
我已經通過Response.Redirect("test.pdf")
生產服務器上加載從文件測試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上的第一個方法頭。