我的目的是显示特定型号的信息。
在那个信息中我有一个图像,这是一个数组的字节。
现在我想要显示该图像。
我在我看来这是
<img src="@Url.Action("getImg", "Image", new { image = Model.image })" />
我的错误是什么?
所有其他信息都正确显示。
这是我想要调用的控制器
public class ImageController : Controller
{
//
// GET: /Image/
public ActionResult Index()
{
return HttpNotFound();
}
// To convert the Byte Array to the image
public FileContentResult getImg(byte[] image)
{
if (image != null)
{
return new FileContentResult(image, "image/jpeg");
}
else
{
return null;
}
}
}
答案 0 :(得分:1)
这在设计上似乎是一个非常糟糕的选择。这段代码:
<img src="@Url.Action("getImg", "Image", new { image = Model.image })" />
因此,图像将作为字节数组发送到客户端(假设为60,000字节)。将创建可能看起来像的HTML:
<img src="/Image/getImg/?image=bc15b2c53... (lots of characters" />
这个html非常长,基本上将图像作为字节数组发送到客户端。接下来,浏览器将通过将字节数组发送回控制器(另外60,000字节到服务器)来另外请求获取图像。
接下来,控制器将发送给它的字节数组再次返回给浏览器,作为图像。三次60k的数据是一个糟糕的想法。
<强>更新强>
更好的方法是不将字节数组发送到视图,而是发送ID。
<img src="@Url.Action("getImg", "Image", new { id = Model.id })" />
然后在控制器中:
public class ImageController : Controller
{
public FileContentResult getImg(int?/guid? id)
{
if (id.HasValue)
{
byte[] bytes = db.GetBytesById(id.Value);
return new FileContentResult(bytes, "image/jpeg");
}
else
{
// be nice to the browser, send the correct result!
return new FileNotFoundResult();
}
}
}