Displaying an image from SQL Server in ASP.NET MVC
2 answers
Making a custom result is the cleanest way to handle this, here's a good example:
http://blog.maartenballiauw.be/post/2008/05/ASPNET-MVC-custom-ActionResult.aspx
+1
a source to share
My app uses this feature:
//
// 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 from the comments, my biggest problem so 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 that I use to render images, and their variations for 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);
}
.. helpers DBImage
are those that use an action GetFile
.
+3
a source to share