c# - 使用 ASP.NET MVC4 检索在数据库中存储为字节数组的图像的好方法?

标签 c# .net asp.net-mvc-4

我正在编写一个 ASP.NET MVC4 应用程序,它将上传的图像作为 byte[] 存储在数据库中(使用 Entity 框架),然后显示它们。要在 View 中显示我正在使用此代码的图像:

<img src="data:image;base64,@System.Convert.ToBase64String(item.ImageByte)" alt=""/>

但每次我刷新页面时,我都会看到浏览器没有缓存图像,只是再次渲染它,导致不必要的带宽使用。

也许有一种带宽更友好的方式来显示图像? 也许将上传的图像存储为 'byte[]' 的想法首先是愚蠢的(我的应用程序只是一个简单的网页,用于存储有关心理学的文章 :D 带有管理面板来实现此目的)我应该将图像存储在一个文件夹?

谢谢

最佳答案

将图像存储在数据库中是一种可能的选择。有时这是个好主意,有时是个坏主意。通常,如果处理大量或大尺寸的图像,您可能会被建议重新考虑使用不同的存储方法。

实际上,您当前正在做的是将图像嵌入到 HTML 中;这可能很好我以前用过它,当时计算图形数据需要大约 5 秒,而页面需要相同的数据,但在一般情况下,你最好从 Action 中提供图像.

所以我们需要做的是在 Controller 中提供一个获取图像的 Action ;可能基于 id - 但我会留给你。

[OutputCache(Duration = 3600, VaryByParam = "id")]
public ActionResult GetImage(int Id)
{
    // 1. provide connection to entity framework
    var dbc = new DatabaseContext();
    var item = dbc.FindItem(Id);// call to get the image from EF (2)
    var ms = new MemoryStream(tem.ImageByte);    
    FileStreamResult result = new FileStreamResult(ms, "image/png");
    result.FileDownloadName = item.ImageName; // or item.Id or something (3)
    return result;
}

在 cshtml 中

<img src="@Url.Action("GetImage", "Controller", new {Id = Model.ImageId})" />

所以在上面的代码中你需要提供

  1. 与 EF 的连接
  2. 定位图片的调用
  3. 图片名称的东西
  4. 可能改变输出缓存

关于c# - 使用 ASP.NET MVC4 检索在数据库中存储为字节数组的图像的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18155220/

相关文章:

c# - 使用 WPF MVVM 更新与 DataGrid 控件(MaterialDesign 主题)绑定(bind)的数据以及附加行为?

c# - 从 JsonContract 中读取 JSON 属性名称

c# - 更改 MVC 4 上的默认路由

c# - 值字段是必需的

c# - 使用 Web API 返回匿名类型

c# - 在我的 ASP.NET 应用程序中的什么地方注册 IMemoryCache?

asp.net-mvc-4 - 如何从 FileStreamResult 引发 http 404?

asp.net-mvc - 关于 MVC 4 和 jQuery 的教程或书籍

c# - 使用 ASP.NET C# 在 AD 中创建用户时无法使用 DirectoryEntry.Invoke 设置密码

c# - Task.Yield 是否真的在当前上下文中运行延续?