私は PDF/Word/Excel ファイルを表示する Asp.NET サイトを持っていますが、ファイルの場所を非表示にしたいと思います。つまり、ユーザーがパスを表示する代わりにリンクを介してファイルを要求した場合、ファイル名を開くだけです。他のサイトでいくつかの他の投稿を見ましたが、それらは古いため、中華鍋ではありません。
どんな助けでも大歓迎です。
ありがとう
私は PDF/Word/Excel ファイルを表示する Asp.NET サイトを持っていますが、ファイルの場所を非表示にしたいと思います。つまり、ユーザーがパスを表示する代わりにリンクを介してファイルを要求した場合、ファイル名を開くだけです。他のサイトでいくつかの他の投稿を見ましたが、それらは古いため、中華鍋ではありません。
どんな助けでも大歓迎です。
ありがとう
ASP.NET ASHX ハンドラーを使用する
一部の ASP.NET ファイルは動的に生成されます。これらは、C# コードまたはディスク リソースで生成されます。これらのファイルには Web フォームは必要ありません。代わりに、ASHX 汎用ハンドラーが理想的です。クエリ文字列から画像を動的に返したり、XML やその他のデータを書き込んだりできます。
これを回避する 1 つの方法は、IHttpHandler を実装するカスタム .ashx ハンドラーを作成することです。
ProcessRequest(..) メソッドを実装し、応答でファイルをパイプします (これは、私がしばらく前に書いたアプリケーションの例です:
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim inline As Boolean = Boolean.Parse(context.Request.QueryString("Inline"))
Dim fileName As String = context.Request.QueryString("fileName")
If (fileName.Contains("\")) Then Throw New Exception(String.Format("Invalid filename {0}. Looks like a path was attempted", fileName))
Dim filePath = ConfigurationManager.AppSettings("FileDirectory") + "\" + fileName
With context.Response
.Buffer = True
.Clear()
If inline Then
.AddHeader("content-disposition", "inline; ; filename=" & IO.Path.GetFileName(filePath))
Else
.AddHeader("content-disposition", "attachment; ; filename=" & IO.Path.GetFileName(filePath))
End If
.WriteFile(filePath)
If fileName.ToUpper.EndsWith(".PDF") Then
.ContentType = "application/pdf"
ElseIf fileName.EndsWith(".htm") Or fileName.EndsWith(".html") Then
.ContentType = "text/html"
ElseIf fileName.EndsWith(".tif") Then
.ContentType = "image/tiff"
ElseIf fileName.EndsWith(".jpeg") Or fileName.EndsWith(".jpg") Then
.ContentType = "image/jpeg"
End If
.End()
End With