0

我有一个视图来显示特定模型的信息。

在该信息中,我有一个图像,它是一个字节的数组。

现在我想显示该图像。

我认为这是

<img src="@Url.Action("getImg", "Image",  new { image = Model.image })" />

注意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;
        }
    }
}
4

1 回答 1

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();
    }
  }
}
于 2013-10-30T08:00:41.173 回答