Visual Studio 2012 - ASP.net - MVC 4
I am having troubles displaying an image from a server path which is stored in a database.
I am using HttpPostedFileBase to retrieve the file the user has uploaded:
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;
}
This will save the absolute path of the uploaded file into the database and save the file onto the server. When I try to retrieve this path to display an image file in a view all I get is a blank square like the file is not being found (about:blank when right click -> copy image url). I know the path is correct because I am using it in a different view to allow users to download files, which is working correctly. Also I am allowing the user to edit the file which successfully deletes the old and uploads a new one. The only problem I am having is displaying an image in a view.
I have tried:
<img src="@Html.Encode(Model.ImageLoc)" />
<img src=@Url.Content(Model.ImageLoc)" />
Would anyone be able to suggest anything?
Look at using
http://msdn.microsoft.com/en-us/library/system.web.mvc.mvchtmlstring%28VS.100%29.aspx I suspect it's being encoded hence not outputting as you expect.
You have stored the absolute path to the image in your database, but you need to reference it with the relative path:
The resulting HTML must look like this:
and not:
because the client cannot access such folders from the server.