如何将图像的服务器路径分配给img src

时间:2019-05-15 22:36:20

标签: c# asp.net model-view-controller

我想在数据库视图中显示图像。我将图像路径存储在数据库中,因此我想将该路径提供给img src="",但它不起作用。代码如下:

下面的代码在视图中

@{
   var FileName = db.UserImages.FirstOrDefault(x => x.UserID == User.Identity.Name).ImgName;
   var serverpath = Server.MapPath("~/App_Data/ProfileImages/");
   string filename = Path.GetFileName(FileName);
   string fullpath = Path.Combine(serverpath, filename);

   ViewBag.fullpath = fullpath;
}

<img src="@Url.Content("~/App_Data/ProfileImages/" + System.IO.Path.GetFileName(ViewBag.fullpath))" class="user-image" alt="User Image">

未在路径正确的位置加载图片,但无法正常显示

3 个答案:

答案 0 :(得分:1)

由于您的fullpath本质上包含所述图像文件的整个路径,因此它应该不应该位于下方

<img src="@Url.Content(ViewBag.fullpath)" class="user-image" alt="User Image">

答案 1 :(得分:1)

使用绝对路径不是图像URL的好习惯。

您应在web config中配置图像路径或将图像移至CDN并使用它。

在网络配置中

<appSettings>
   <add key="BaseImageUrl" value="/Content/Images" />
</appSettings>

在cshtml中

@{
    var FileName = db.UserImages.FirstOrDefault(x => x.UserID == User.Identity.Name).ImgName;
    var baseUrl = ConfigurationManager.AppSettings["BaseImageUrl"];
    var imagePath = string.Format("{0}/{1}", baseUrl, FileName);
}

<img src="@imagePath" class="user-image" alt="User Image"/>

您还应该移动代码以将FileName获取到控制器,否则服务层不应在UI层进行编码。

答案 2 :(得分:0)

Server.MapPath 调用将为您提供基于服务器的文件路径,即类似于 c:\ websites \ mywebsite \ App_Data \ ProfileImages 的文件路径可通过网络访问。

从您的代码片段来看,您似乎只需要将从数据库中检索到的已清理FileName与〜/ App_Data / ProfileImages /

结合起来
@{
   var FileName = db.UserImages.FirstOrDefault(x => x.UserID == User.Identity.Name).ImgName;
   string filename = Path.GetFileName(FileName);
}

<img src="@Url.Content("~/App_Data/ProfileImages/" + filename)" class="user-image" alt="User Image">

编辑: App_Data是一个特殊的受保护文件夹,除非进行配置,否则IIS不会从中提供文件,请查看system.webServer / security / requestFiltering / hiddenSegments