我正在开发一个项目,我从数据库加载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;
}
答案 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
}
}