在asp.net mvc中显示数据库中的图像

时间:2009-11-18 17:44:21

标签: asp.net asp.net-mvc database image

我有一个包含用户ID和图像列的视图。

这是我试图检索图像但我不断得到一个红色x而不是实际图像的框。

查看

<td><img src="<%= Url.Action( "DisplayImage" , "User" , new { id = item.id} ) %>" alt="" /></td>

控制器

  public FileContentResult DisplayImage(string id)
    {
        byte[] image = repository.GetImage(id);
        return File(image, "image/jpg");
    }

我也试过返回一个ActionResult而且也没用。

存储库

    public Byte[] GetImage(string id)
    {

        var image = db.GetImage(id).First<GetImageResult>();

        if (image == null)
            return null;
        return image.UserImage;
    }

LinqTOSQL类

    [Function(Name="dbo.GetImage")]
public ISingleResult<GetImageResult> GetImage([Parameter(DbType="VarChar(8)")] string id)
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), id);
    return ((ISingleResult<GetImageResult>)(result.ReturnValue));
}

public partial class GetImageResult
{
    private System.Byte[] _userImage;

    public GetImageResult()
    {
    }


    [Column(Storage="_userImage", DbType="Image")]
    public System.Byte[] UserImage
    {
        get
        {
            return this._userImage;
        }
        set
        {
            if ((this. _userImage!= value))
            {
                this. _userImage = value;
            }
        }
    }
}

我整天都在努力让自己开始工作,但它只是不起作用。 存储过程的返回类型是一个整数(至少当我查看参数时) SQL Server Management Studio它说整数),但我现在无法重新定义它吗?

它实际上是在UserController中使用正确的参数触及DisplayImage Action并返回File(imageByteArray,“image / jpg”),但只显示带有红色x的框。 任何帮助将不胜感激。

编辑:我已经尝试通过在操作结果中添加Reponse.BinaryWrite(imageByteArray)并直接通过goign到http://localhost/User/DisplayImage?id=10101010点击网址进行调试,并且该用户的图像显示在mspaint中。

edit2:我也做了一个视图源,我的html for the image标签如下所示。

<td>
    <img src='/User.mvc/GetImage?id=U00915441' alt="" />
</td>

由于

1 个答案:

答案 0 :(得分:3)

看看我前一段时间的这个问题 - 解决方案是special ActionResult type for images

编辑:这是我的代码。我实际上是用我用GDI +创建的Image创建一个ImageResult类,如下所示:

 return new ImageResult()
 {
      ImageFormat = spriteInfo.ImageFormat,
      EncodedImageBytes = spriteInfo.GetImageStream()
 };

图像结果类是。你会注意到,如果我提供一个EncodedImageBytes参数,它会将它发送到输出流。这看起来就像你想要的。另一方面,如果您只是传入一个Image,那么它只会将Image写入输出流。

 public class ImageResult : ActionResult
    {
        public ImageResult() { }
        public int? Quality { get; set; }
        public Image Image { get; set; }
        public ImageFormat ImageFormat { get; set; }
        public byte[] EncodedImageBytes { get; set; }

        public override void ExecuteResult(ControllerContext context)
        {
            // verify properties 
            if (EncodedImageBytes == null)
            {
                if (Image == null)
                {
                    throw new ArgumentNullException("Image");
                }
            }
            if (ImageFormat == null)
            {
                throw new ArgumentNullException("ImageFormat");
            }
            // output 
            context.HttpContext.Response.Clear();

            if (ImageFormat.Equals(ImageFormat.Bmp)) context.HttpContext.Response.ContentType = "image/bmp";
            if (ImageFormat.Equals(ImageFormat.Gif)) context.HttpContext.Response.ContentType = "image/gif";
            if (ImageFormat.Equals(ImageFormat.Icon)) context.HttpContext.Response.ContentType = "image/vnd.microsoft.icon";
            if (ImageFormat.Equals(ImageFormat.Jpeg)) context.HttpContext.Response.ContentType = "image/jpeg";
            if (ImageFormat.Equals(ImageFormat.Png)) context.HttpContext.Response.ContentType = "image/png";
            if (ImageFormat.Equals(ImageFormat.Tiff)) context.HttpContext.Response.ContentType = "image/tiff";
            if (ImageFormat.Equals(ImageFormat.Wmf)) context.HttpContext.Response.ContentType = "image/wmf";

            // output stream
            Stream outputStream = context.HttpContext.Response.OutputStream;
            if (EncodedImageBytes != null)
            {
                outputStream.Write(EncodedImageBytes, 0, EncodedImageBytes.Length);
            }
            else
            {
                ImageUtil.SaveImageToStream(outputStream, Image, ImageFormat, Quality);
            }
        }

    }