2013-08-20 73 views

回答

6

由於操作方法在服務器上運行,因此它可以訪問任何有權訪問的文件。該文件不需要位於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這將防止有人注射的路徑來訪問不同的文件驅動/股。

+0

你也可以檢查輸入文件名是否有無效字符(包括前/後斜線),以避免注入問題 – DaveD

3

你可以這樣做兩種方式。

選項1,你可以創建一個指向這個其他目錄的虛擬目錄。這意味着你可以通過另一個URL訪問圖像。例如創建一個名爲「OtherImages」的虛擬目錄,然後你的URL將會是;

http://www.mywebsite.com/otherimages/myimage.jpg 

選項2,則可以創建一個簡單HttpHandler其可以從絕對路徑加載的圖像,然後輸出這在響應中。請閱讀HttpHandlers並動態生成圖像。

+0

爲真,我忘記了一個虛擬目錄,這會讓我覺得效率更高。 – loyalflow

相關問題