2013-06-18 56 views
3

我有一個ASP.NET MVC 4 Web應用程序駐留在服務器上的C:\ inetpub \ wwwroot \ appName目錄中。我想將由用戶上載的圖像存儲在D:\ appName \ UserFolder \目錄中,然後在剃鬚刀視圖中顯示這些圖像。我創建了下面的HTML幫助:在文件系統中顯示圖像

public static class MyHtmlHelpers 
{ 
    public static IHtmlString UploadedImage(this HtmlHelper htmlHelper, string url) 
    { 
     var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext); 
     var image = new TagBuilder("img"); 
     image.Attributes["src"] = UrlHelper.GenerateContentUrl(url, htmlHelper.ViewContext.HttpContext); 
     return MvcHtmlString.Create(image.ToString(TagRenderMode.SelfClosing)); 
    } 
} 

,我用上面的助手這樣的:

@Html.UploadedImage(item.StoreItemImage) 

item.StoreItemImage從數據庫帶來的圖像的絕對路徑(假設d:\應用程序名稱\ UserFolder \ image.jpg文件)。這個幫手最終呈現這樣的圖像

<img src="D:\appName\UserFolder\image.jpg" /> 

圖像不顯示在瀏覽器中。此外,它並不是一種優雅和安全的方式來揭示應用程序存儲圖像的實際服務器路徑。請任何解決方案?謝謝。

SOLUTION

所以,僅僅是爲了記錄我張貼,根據科裏的建議,爲我工作的解決方案。這可能是幫助他人我創建了以下操作方法:

public FileResult GetImage(string fileLocation) 
    { 
     Image image = Image.FromFile(fileLocation); 
     byte[] imageArray; 

     using (var memoryStream = new MemoryStream()) 
     { 
      image.Save(memoryStream, ImageFormat.Jpeg); 
      imageArray = memoryStream.ToArray(); 
     } 

     return File(imageArray, "image/jpeg"); 
    } 
+0

當然,這將不能夠表明,IIS不有權訪問該文件夾它不在WWW根目錄內。您可以從源讀取原始圖像數據並將其臨時保存在IIS有權訪問的文件夾中... – Mansfield

+0

[ASP.Net MVC控制器是否可以返回圖像?](http://stackoverflow.com/問題/ 186062/can-an-asp-net-mvc-controller-return-an-image) –

回答

5

假設你有某種形式的密鑰或ID數據庫中與每個圖像,你可以改爲「隱藏」的圖像通過使其源一個動作(僅使用數據庫ID來引用它):

public ActionResult GetImage(int dbId) 
{ 
    byte[] image = LoadImageFromDatabase(dbId); 
    return File(image, "image/jpeg"); 
} 

並且在視圖使用此標記:

<img src="@Url.Action("GetImage", new { dbId = Model.PhotoDatabaseId })" /> 
+0

這真的起作用,謝謝 –

相關問題