2011-06-03 15 views
7

我嘗試使用here的答案,但它不起作用。我有以下代碼:ASP.NET MVC3:通過控制器加載圖像

public ActionResult ShowImage() 
{ 
    using (FileStream stream = new FileStream(Path.Combine(Server.MapPath("/App_Data/UserUpload/asd.png")), FileMode.Open)) 
    { 
     FileStreamResult result = new FileStreamResult(stream, "image/png"); 
     result.FileDownloadName = "asd.png"; 
     return result; 
    } 

} 

當我打開頁面時,出現一個錯誤信息:「無法訪問已關閉的文件」。我在搜索錯誤方面做了一些搜索,但是我只發現了與上傳相關的錯誤。是什麼原因導致這個問題?

回答

9

嘗試這樣的:

public ActionResult ShowImage() 
{ 
    var file = Server.MapPath("~/App_Data/UserUpload/asd.png"); 
    return File(file, "image/png", Path.GetFileName(file)); 
} 

,或者如果你想有一個單獨的文件名:

public ActionResult ShowImage() 
{ 
    var path = Server.MapPath("~/App_Data/UserUpload"); 
    var file = "asd.png"; 
    var fullPath = Path.Combine(path, file); 
    return File(fullPath, "image/png", file); 
} 
+0

這工作,謝謝!還是有點感興趣,爲什麼我提交的代碼沒有工作? – Esa 2011-06-03 10:20:15

+1

@Esa,在您提供的代碼中,您已將FileStream包裝到'using'子句中,意味着此流將在控制器操作返回之前處理。但是,動作結果將在MVC管道中稍後執行,並且當它嘗試使用已傳遞給「FileStreamResult」的Stream時,它將被關閉。 – 2011-06-03 10:56:57

+0

總是樂於學習更多,謝謝。 – Esa 2011-06-03 11:29:42