として保存されたPDF私はブラウザ上でバイナリデータからPDFを表示するASHXハンドラを持って、私は.NET Frameworkの4.0を使用していますが、6およびChromeブラウザをIIS: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)から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-Range"と "Content-Lenght"ヘッダーが欠落していますが、 "Transfer-Encoding:chunked"ヘッダーがあることに気付きました。これが問題の原因になると思いますか?私はASHXの最初のメソッドヘッダーを複製しようとします。
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")))
これら生成されたファイルは、セッションの終了時に削除する必要があります。