tags:

views:

519

answers:

2

I am trying to retrieve an image from SQL Server (yes, data type is image) and display it in a view in my ASP.NET MVC app. Does anyone know how this can be done? A working example would be appreciated.

+1  A: 

Creating a custom result is the cleanest way to handle this, here is a good example:

http://blog.maartenballiauw.be/post/2008/05/ASPNET-MVC-custom-ActionResult.aspx

James Avery
+3  A: 

My app uses this functionality:

    //
    // GET: /FileManager/GetFile/ID
    //[CompressFilter(Order = 1)]
    [OutputCache(Order = 2, Duration = 600, VaryByParam = "ID")]
    //[OutputCache(Duration = 600, VaryByParam = "ID", Location = System.Web.UI.OutputCacheLocation.ServerAndClient)]
    public ActionResult GetFile(int ID)
    {
        FileService svc = new FileService(new SqlFileRepository(base.ConnectionString));

        KsisOnline.Data.File result = svc.GetFileByID(ID);

        return File(result.Data, result.MimeType, result.UploadFileName);
    }

..as you can see by by comments, my biggest problem thus far has been caching the image result. (btw: the method is called GetFile coz it returns images, PDFs and others)

I also have a number of helpers i use to render images, and variations of these for the images that come from the DB:

    public static string Image(this HtmlHelper helper,
        string classText, string sourcePath, string altText, string width, string height)
    {
        return Image(helper, classText, sourcePath, altText, width, height, null);
    }

    public static string Image(this HtmlHelper helper,
        string classText, string sourcePath, string altText, string width, string height, object htmlAttributes)
    {
        StringBuilder sb = new StringBuilder();
        if (htmlAttributes != null)
            foreach (PropertyInfo p in htmlAttributes.GetType().GetProperties())
                sb.AppendFormat(@" {0}=""{1}""", p.Name, p.GetValue(htmlAttributes, null).ToString());

        if (htmlAttributes == null)
            return String.Format(@"<img{0} src=""{1}"" alt=""{2}"" width=""{3}"" height=""{4}"" />",
                String.IsNullOrEmpty(classText) ? String.Empty : String.Format(@" class=""{0}""", classText),
                (new UrlHelper(helper.ViewContext.RequestContext)).Content(sourcePath),
                altText, width, height);
        else
            return String.Format(@"<img{0} src=""{1}"" alt=""{2}"" width=""{3}"" height=""{4}""{5} />",
                String.IsNullOrEmpty(classText) ? String.Empty : String.Format(@" class=""{0}""", classText),
                (new UrlHelper(helper.ViewContext.RequestContext)).Content(sourcePath),
                altText, width, height, sb.ToString());
    }

    public static string DBImage(this HtmlHelper helper,
      string classText, int fileID, string altText, string width, string height)
    {
        return DBImage(helper, classText, fileID, altText, width, height, null);
    }

    public static string DBImage(this HtmlHelper helper,
        string classText, int fileID, string altText, string width, string height, object htmlAttributes)
    {
        return Image(helper, classText, @"/FileManager/GetFile/" + fileID.ToString(),
            altText, width, height, htmlAttributes);
    }

..the helpers DBImage are the ones that use the GetFile action.

cottsak