2012-10-09 85 views
4

的Visual Studio 2012 - ASP.net - MVC 4ASP.Net MVC - IMG SRC服務器路徑

我有麻煩顯示從存儲在數據庫中的服務器路徑的圖像。

我使用HttpPostedFileBase檢索用戶已經上傳的文件:

using (var uow = _db.CreateUnitOfWork()) 
      { 
       if (imageUpload != null && imageUpload.ContentLength > 0) 
       { 
        var fileName = Path.GetRandomFileName() + Path.GetExtension(imageUpload.FileName); 
        var path = Path.Combine(System.Web.Hosting.HostingEnvironment.MapPath("~/Uploads"), fileName); 
        imageUpload.SaveAs(path); 
        achievement.ImageLoc = path; 
       } 

       uow.Add(achievement); 
       Save(uow); 
       return true; 
      } 

這將節省上傳文件到數據庫的絕對路徑,將文件保存到服務器上。當我嘗試檢索此路徑以在視圖中顯示圖像文件時,我所得到的只是一個空白的方塊,例如文件未找到(關於:右鍵單擊時爲空白 - >複製圖像url)。我知道路徑是正確的,因爲我在不同的視圖中使用它,以允許用戶下載正常工作的文件。此外,我允許用戶編輯成功刪除舊的文件並上傳一個新的文件。我遇到的唯一問題是在視圖中顯示圖像。

我曾嘗試:

<img src="@Html.Encode(Model.ImageLoc)" /> 
<img [email protected](Model.ImageLoc)" /> 

會有人能夠提出什麼嗎?

+0

您是否檢查過輸出的Html? (即它在呈現的頁面上查看源代碼)。快速掃描它放在'src'標籤中的鏈接可能會讓你更好地瞭解什麼是錯誤的。需要檢查的內容包括被雙重編碼的路徑(即,在數據庫的路上對其進行一次編碼,並在出路時再次編碼),或者在路徑末尾丟失「/」。 – Smudge202

+0

回答

12

已存儲在數據庫中的圖像的絕對路徑,但是你需要用相對路徑來引用它:

<img src="@Url.Content("~/Uploads/" + System.IO.Path.GetFileName(Model.ImageLoc))" alt="" /> 

生成的HTML必須是這樣的:

<img src="/Uploads/tccxdfu0.nde.jpg" alt="" /> 

而不是:

<img src="\\PDC2\sites\t\<site.co.uk>\public_html\Uploads\tccxdfu0.nde.jpg" alt="" /> 

因爲客戶端無法從服務器訪問這些文件夾。

+0

非常感謝,工作!:) – Jpin

+0

Saweet!與Video.js合作很棒+1 – JoshYates1980