0

Web ページに pdf ファイルを含むサブフォルダーがあります。
ユーザーがログインしていて、Microsoft CRM を介してログイン情報にアクセスし、変数がキャッシュに保存されている場合にのみアクセスする必要があります。
コードは vb.net で記述され、Web サーバーは IIS7 です。

ログインしていないユーザーがこのフォルダにアクセスできないようにするにはどうすればよいですか? 解決策を探していましたが、CRM ログインで機能する解決策が見つかりませんでした。

また、ユーザーがファイルへの直接パス (www.abc.com/download/test.pdf) を見ることができないように、URL の書き換えも検討しており、代わりに、わかりやすい URL (www.abc) のみが表示されます。 .com/pdf)。しかし、それも機能していません。

したがって、私はほとんどすべての提案を受け入れますが、ユーザーベース全体を複製することはできません。または、この目的のためだけに sql データベースをセットアップすることもできません。


ニコラスの回答は、次の追加で機能します。


fs As New FileStream("C:\www\pdf\abc.pdf", FileMode.Open)
Dim docSize As Long = fs.Length
Dim docStream(CInt(docSize)) As Byte
fs.Read(docStream, 0, CInt (docSize))
Response.ClearContent()
Response.ContentType = "application/pdf"
Response.AddHeader("Content-Disposition", "inline; filename=/_data/checkliste-4-2013-2.pdf")
Response.AddHeader ("Content-Length", docSize.ToString())
Response.BinaryWrite(docStream)
Response.End()
End Using

4

1 に答える 1

0

私が取り組んだ Web アプリケーションでは、PDF ファイルをブラウザーにストリーミングします。この方法では、誰もファイルの URL に直接アクセスできず、ASPX ページであるため、任意のセキュリティを適用できます (つまり、ユーザーはログインする必要があります)。

私が使用したものと同様のサンプルコードを次に示します。

    Dim strFilePath As String = "C:\www\pdf\abc.pdf"
    Using fs As New System.IO.FileStream(strFilePath, System.IO.FileMode.Open)
        Dim docStream(fs.Length) As Byte
        fs.Read(docStream, 0, CInt(fs.Length))

        Response.ClearContent()
        Response.ContentType = "application/pdf"
        Response.AddHeader("Content-Disposition", "inline; filename=" + System.IO.Path.GetFileName(strFilePath))
        Response.AddHeader("Content-Length", fs.Length)
        Response.BinaryWrite(docStream)
        Response.End()
    End Using
于 2013-08-23T12:34:14.733 に答える