2013-08-23 47 views
0

我的網頁上有一個pdf文件的子文件夾。
只有在用戶登錄後才能訪問它們,通過Microsoft CRM訪問登錄信息並將變量存儲在緩存中。
代碼是用vb.net編寫的,webserver是IIS7。
使IIS7上的登錄用戶只能訪問文件夾

如何防止未登錄用戶訪問此文件夾? 我一直在尋找一個解決方案,但沒有找到一個與CRM登錄一起工作的解決方案。

我也一直在尋找URL重寫,以便用戶不能看到文件的直接路徑(www.abc.com/download/test.pdf),而是隻會看到一個非簡明的url (www.abc.com/pdf)。但還沒有得到那個工作。

所以我打開幾乎所有的建議,但我不能複製整個用戶數據庫或想爲此設置一個sql數據庫。


尼古拉斯答案可與本補充:


使用FS作爲新的FileStream( 「C:\ WWW \ PDF \ abc.pdf」, FileMode.Open)
昏暗docSize只要= fs.Length
昏暗 docStream(CINT(docSize))作爲字節
fs.Read(docStream,0, CINT(docSize))
Response.ClearContent()
Response.ContentType = 「應用/ PDF」
Response.AddHeader(「Content-Disposition」,「inline;文件名=/_數據/ checkliste-4-2013-2.pdf 「)
Response.AddHeader(」 內容長度」,docSize.ToString())
Response.BinaryWrite(docStream)
到Response.End()
結束使用

回答

0

在Web應用程序中我工作,我們流的PDF文件瀏覽器,這樣誰也沒有該文件的URL直接訪問,因爲它是一個ASPX頁面,我們可以應用任何securtiy我們想要(即用戶必須登錄)

以下是與我使用的相似的示例代碼:

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 
+0

我更新了代碼示例以提供完整的解決方案。 –

+0

這是行得通的,但如果你已經解釋了你的代碼的功能(並且使用了vb.net而不是c#),那將會很不錯。另外如何解釋strFilePath,docSize和docStream的來源?對於任何其他工作的VB代碼是在我的問題。 – snookerfan17

相關問題