當用戶上傳圖像時,圖像存儲在文件系統中,但不在公共可訪問範圍內。如何在網頁根目錄外存儲圖像時在頁面上顯示圖像
我正在顯示項目列表,每個項目都有一個與之相關的圖像。
如何在實際文件存儲在wwwroot文件夾之外時顯示圖像?即它不是公衆可用的。
當用戶上傳圖像時,圖像存儲在文件系統中,但不在公共可訪問範圍內。如何在網頁根目錄外存儲圖像時在頁面上顯示圖像
我正在顯示項目列表,每個項目都有一個與之相關的圖像。
如何在實際文件存儲在wwwroot文件夾之外時顯示圖像?即它不是公衆可用的。
由於操作方法在服務器上運行,因此它可以訪問任何有權訪問的文件。該文件不需要位於wwwroot
文件夾內。你只需要告訴動作方法得到哪個圖像。
例如:
<img src="/mycontroller/myaction/123">
你的行動會再看看這樣的:
public FileResult MyAction(int id)
{
var dir = "c:\myimages\";
var path = Path.Combine(dir, id + ".jpg");
return new FileStreamResult(new FileStream(path, FileMode.Open), "image/jpeg");
}
請注意,該ID是int
這將防止有人注射的路徑來訪問不同的文件驅動/股。
你可以這樣做兩種方式。
選項1,你可以創建一個指向這個其他目錄的虛擬目錄。這意味着你可以通過另一個URL訪問圖像。例如創建一個名爲「OtherImages」的虛擬目錄,然後你的URL將會是;
http://www.mywebsite.com/otherimages/myimage.jpg
選項2,則可以創建一個簡單HttpHandler
其可以從絕對路徑加載的圖像,然後輸出這在響應中。請閱讀HttpHandlers並動態生成圖像。
爲真,我忘記了一個虛擬目錄,這會讓我覺得效率更高。 – loyalflow
你也可以檢查輸入文件名是否有無效字符(包括前/後斜線),以避免注入問題 – DaveD