0

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.

2 Answers 2

3

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.

Sign up to request clarification or add additional context in comments.

Comments

1

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.