[英]Best way to store model image using EF5 and retrieve in MVC View
我正在寻找将图像数据存储在模型中然后在视图中检索它的最佳方法。
目前我有:
public class Product
{
public int Id { get; set; }
public byte[] Image { get; set; }
}
然后我有一个控制器
public class ProductController
{
public ActionResult List()
{
return View(Repository.GetAll())
}
public FileContentResult GetImage(int id)
{
Product p = Repository.GetById(id);
return new FileContentResult(p.Image, "image/jpeg");
}
}
一个看法...
@model IEnumerable<Product>
@foreach(var product in Model)
{
<img src="@Url.Action("GetImage", "Person", new { id = item.Id })" alt="Person Image" />
}
发生的事情就是当我在列表中获得越来越多的产品时,图像开始在屏幕上闪烁,因为它可以立即加载。
我正在发布到Azure所以我不能真的只是将byte[]
更改为string
并在~/Images/ProductImage.jpeg
查找string
,因为每次我想要添加新产品时都必须发布网站(如据我所知)。
我只是在寻找另一种方法来做这个或者为什么我的视图上的图像逐渐出现并且一个接一个地闪现而不是立即闪现的原因?
图像“闪烁”而不是即时,因为您的浏览器必须返回到每个图像的服务器。 许多浏览器都限制了在任何给定时间可以打开多少额外链接(css文件,js文件,图像文件等)。 这就是为什么你的图像不会立即出现的原因。
您可以做的一些事情来帮助:
GetImage
操作中添加[OutputCache(...)]
属性。 这样,图像将缓存在服务器和/或客户端上以加快加载速度。 编辑:
img
src标签会直接指向blob进行访问。 其中一种方法是直接从字节数组中显示图像:
<img src="data:image/png; base64, @Convert.ToBase64String(product.Image)">
应该适用于小图像。 您可能还希望存储图像MIME,以便区分data / png和data / jpg等。
这应该立即加载图像,因为它们将是发送到视图的模型的一部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.