我想显示数据库中的图像
我有一个动作
public FileContentResult GetImage(string param)
{
type obj = _someRepository.GetType(param);
if (obj!= null && obj.Image!= null)
{
return File(obj.Image.ToArray(), obj.Image.MimeType);
}
return "some default image";
}
在我的视图中
< img src="<%:Url.Action("GetImage","ControllerName",new { param= somevalue })%>" alt="some text"
width="100px" height="100px" />
我也有
(Html.BeginForm("actionname", "controllername", FormMethod.Post, new { enctype = "multipart/form-data" })
集。
从数据库中提取图像数据但是我无法在浏览器中看到图像, 有什么我想念的吗?
答案 0 :(得分:1)
以下是为了隔离问题而执行的步骤。从简单的控制器操作开始,该操作从硬盘驱动器返回一些硬编码图像:
public ActionResult GetImage(string param)
{
byte[] image = File.ReadAllBytes(@"c:\work\foo.png");
return File(image, "image/png");
}
现在直接导航到浏览器中的/ControllerName/GetImage
,您就会看到图片。
下一步是从数据库中获取图像,并可能将其存储在硬盘上,以确保它是有效的图像:
type obj = _someRepository.GetType(param);
File.WriteAllBytes(@"c:\work\foo.png", obj.Image.ToArray());
现在检查生成的文件并查看它是否有效。最后一步是确保<img>
标记中生成的网址与您用于直接测试的网址相同。然后查看FireBug's Net选项卡,查看浏览器是否正确请求图像以及服务器返回的内容。
最有可能的问题是从数据库返回的字节数组不是有效的图像,或者它是空的。
就您在问题中显示的表单而言,这是用于上传文件,它与从控制器操作提供动态图像无关,因此我看不出它可能与您的问题有什么关系。