我正在编写一个 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})" />
所以在上面的代码中你需要提供
- 与 EF 的连接
- 定位图片的调用
- 图片名称的东西
- 可能改变输出缓存
关于c# - 使用 ASP.NET MVC4 检索在数据库中存储为字节数组的图像的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18155220/