在mvc.net核心中从数据库加载图像

时间:2016-12-31 19:52:47

标签: asp.net-mvc asp.net-core

我有一个数据库和一个dbinitializer类,用测试数据填充数据库。我的一个表中的一个列用于存储图像的字符串路径。即:Image =“〜/ Content / Images / example.img”

然后我的视图模型应该为表格中的每个项目渲染图像。

@foreach (var item in Model) {
        <img style="width:200px;height:250px;" src="@Url.Content(item.Image)" alt="@item.Name" />

}

这个确切的方法适用于我的普通mvc应用程序但是当我试图在我的核心应用程序中模拟完全相同的代码时,图像无法呈现。有谁知道为什么我会遇到这个问题?

1 个答案:

答案 0 :(得分:2)

在ASP.NET核心中,默认情况下仅从wwwroot文件夹提供静态文件。这意味着如果您尝试从内容/图像访问文件,这是您的根,它将无法正常工作。

好消息是,您可以根据需要配置静态文件位置。因此,请在启动时更新Configure方法。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
                                                           ILoggerFactory loggerFactory)
{
     // Your existing code goes here

     app.UseStaticFiles();

     app.UseStaticFiles(new StaticFileOptions()
     {
        FileProvider = new PhysicalFileProvider(
              Path.Combine(Directory.GetCurrentDirectory(), @"Content/Images")),
        RequestPath = new PathString("/Images")
     });
}

现在可以从浏览器访问这些图像,如yourSiteName/Images/imageFile.png

现在,您可以修复视图代码以从此路径获取图像。

@foreach (var item in Model)
{
    <div>
        <img src="@Url.Content("~/Images/"+item.Image)"  />
    </div>
}

假设集合中每个项目的item.Image值具有某个值MyImage.png,并且您的应用程序中的MyImage.png上有一个名为Contents/Images的图像root(not in the wwwroot directory

您也可以考虑将图像移动到wwwroot目录,因为ASP.NET团队为此目的添加了该目录(静态资产)。