在mvc3中将blob图像对象从列表显示到网页

时间:2013-02-04 16:25:49

标签: c# asp.net asp.net-mvc-3 blob

我正在开发一个项目,我从数据库加载12个长Blob图像并将它们保存在列表中。

在html页面中,我必须显示图像,但在尝试将blob转换为图像时出现错误。

使用内存流时出现错误Parameter is not valid。无论我做出什么改变,都无法摆脱那个错误。

以下是代码:

    public Image getProduct_Image(byte[] imagebytes)
    {
        byte[] byteArray = new byte[imagebytes.Length];

        MemoryStream ms = new MemoryStream(byteArray);
        ms.Position = 0;

        ms.Read((byteArray, 0, byteArray.Length);
        ms.ToArray();
        ms.Seek(0, SeekOrigin.Begin);
        System.Drawing.Image returnImage = Image.FromStream((Stream) ms);
             Bitmap bmp = new Bitmap(returnImage);
             return bmp;
    }

2 个答案:

答案 0 :(得分:2)

扩展我的评论:

您可以使用.ashx处理程序在几行代码中将字节中的图像写入HTML,但由于您使用的是MVC,因此实际上非常简单。

首先,您只需设置一个控制器操作 - 假设您的图像可以基于整数ID进行识别。将这些字节作为内容返回只是一行。

public FileContentResult SomeImage(int id)
{
    byte[] bytes = GetImageBytesFromDatabase(id);
    return File(bytes, "image/jpeg");
}

您的标记只是一个图像标记,其源代码为此控制器操作:

<img src="@Url.Action("SomeImage", "Home", new { id = 123 })" />

这实际上创建了以下内容,具体取决于您是否对路由做了一些特殊操作:

<img src="/Home/SomeImage/123" />
or possibly
<img src="/Home/SomeImage?id=123" />

答案 1 :(得分:1)

我没有看到你实际上在任何地方填充你的byteArray数据!

另外,为什么要首先创建byteArray变量?你已经将blob数据作为输入变量imagebytes中的byte []。删除byteArray并使用imagebytes。

public Image getProduct_Image(byte[] imagebytes)
{
    try
    {
        if(imagebytes == null || imagebytes.Length == 0)
            throw new InvalidDataException("The blob does not contain any data");  

        MemoryStream ms = new MemoryStream(imagebytes);
        ms.Position = 0;
        ms.Read((imagebytes, 0, imagebytes.Length);
        ms.ToArray();
        ms.Seek(0, SeekOrigin.Begin);

        System.Drawing.Image returnImage = Image.FromStream((Stream) ms);
        return new Bitmap(returnImage);
    }
    catch(Exception ex)
    {
        // deal with the exception
    }
}