1

私は PDF/Word/Excel ファイルを表示する Asp.NET サイトを持っていますが、ファイルの場所を非表示にしたいと思います。つまり、ユーザーがパスを表示する代わりにリンクを介してファイルを要求した場合、ファイル名を開くだけです。他のサイトでいくつかの他の投稿を見ましたが、それらは古いため、中華鍋ではありません。

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

2

ASP.NET ASHX ハンドラーを使用する

一部の ASP.NET ファイルは動的に生成されます。これらは、C# コードまたはディスク リソースで生成されます。これらのファイルには Web フォームは必要ありません。代わりに、ASHX 汎用ハンドラーが理想的です。クエリ文字列から画像を動的に返したり、XML やその他のデータを書き込んだりできます。

于 2012-11-15T13:36:01.433 に答える
1

これを回避する 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
于 2012-11-15T13:33:51.653 に答える