我想在数据库视图中显示图像。我将图像路径存储在数据库中,因此我想将该路径提供给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">
未在路径正确的位置加载图片,但无法正常显示
答案 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