gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:26:49 24 4
gpt4 key购买 nike

我正在编写一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com