2010-01-21 46 views

回答

0

如果Web服務器有到該共享常規網絡訪問,並且可以讀取圖像文件,你可以創建一個新的MVC控制器Image與需要稱作fn一個字符串參數默認操作Index。該操作將從該參數創建一個新的FileResult。然後,當您生成<img>標記時,請將網址設置爲/image/?fn=\\share\image.png之類的內容。 (當然,不要忘了添加適當的路由)

如果Web服務器無法訪問該共享,但該頁面用戶有權訪問,則可以嘗試將<img>標記設置爲file:// URL圖片。但是,這將會很脆弱,根據用戶的操作系統和瀏覽器配置,可能會或可能不會工作。

更新:請仔細閱讀他的回答中提及的@blowdart的安全隱患。

4

不要將映像路徑放在映像標記中作爲腳本的參數。這被稱爲直接對象引用,並且是一件壞事。考慮一下這種腳本/頁面/控制器的簡單實現,它可以作爲/image/?resource=\server\path\img.jpg。

現在如果某人加載/ image/resource /?resource = c:\ windows \ system32 \ config \ SAM會發生什麼情況?您的密碼數據庫被髮送。

你不希望在所有使用完全合格的路徑,理想情況下,你想要麼從該目錄爲所有圖像,並只接受一個文件名,通過執行類似

string filename = Path.GetFileName(userInputtedFilename); 
FileInfo file = new FileInfo(Server.Path.Combine("\\Server\share\", filename))); 
剝離從任何路徑信息

至少是安全的,但當然用戶可以瀏覽所有的圖像,如果他們的名字是適當的。更安全的是有一個間接對象引用,一個映射表映射表,將GUID映射到實際文件名,並將其用作服務腳本的參數。

服務於一個文件從您的控制器上的安全隱患返回FileContentResult

public FileContentResult GetFile(Guid indirectReference) 
{ 
    byte[] fileContents = // Resolve the file and read it from the indirect reference  
    mimeType = // Suitable MIME type 
    return File(fileContent, mimeType, fileName); 
} 
+0

好票據。 – 2010-01-21 10:36:43

相關問題