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
2009-05-10 03:02:37
+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
2009-05-10 04:56:43