2012-10-09 86 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