您的位置:首页 > 数据库

asp.net mvc 从数据库中读取图片的实现代码

2010-05-21 00:00 1056 查看
首先是创建一个类,继承于ActionResult,记住要引用System.Web.Mvc命名空间,如下:
public class ImageResult : ActionResult 
{ 
public ImageFormat ContentType { get; set; } 
public Image image { get; set; } 
public string SourceName { get; set; } 
public ImageResult(string _SourceName, ImageFormat _ContentType) 
{ 
this.SourceName = _SourceName; 
this.ContentType = _ContentType; 
} 
public ImageResult(Image _ImageBytes, ImageFormat _ContentType) 
{ 
this.ContentType = _ContentType; 
this.image = _ImageBytes; 
} 
public override void ExecuteResult(ControllerContext context) 
{ 
context.HttpContext.Response.Clear(); 
context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
if (ContentType.Equals(ImageFormat.Bmp)) context.HttpContext.Response.ContentType = "image/bmp"; 
if (ContentType.Equals(ImageFormat.Gif)) context.HttpContext.Response.ContentType = "image/gif"; 
if (ContentType.Equals(ImageFormat.Icon)) context.HttpContext.Response.ContentType = "image/vnd.microsoft.icon"; 
if (ContentType.Equals(ImageFormat.Jpeg)) context.HttpContext.Response.ContentType = "image/jpeg"; 
if (ContentType.Equals(ImageFormat.Png)) context.HttpContext.Response.ContentType = "image/png"; 
if (ContentType.Equals(ImageFormat.Tiff)) context.HttpContext.Response.ContentType = "image/tiff"; 
if (ContentType.Equals(ImageFormat.Wmf)) context.HttpContext.Response.ContentType = "image/wmf"; 
if (image != null) 
{ 
image.Save(context.HttpContext.Response.OutputStream, ContentType); 
} 
else 
{ 
context.HttpContext.Response.TransmitFile(SourceName); 
} 
} 
}

然后在 Controller类中创建一个Action.如下:
public ActionResult GetPicture(int id) 
{ 
ICategory server = new CategoryServer(); 
byte[] buffer = server.getCategoryPicture(id); 
if (buffer != null) 
{ 
MemoryStream stream = new MemoryStream(buffer); 
System.Drawing.Image image = System.Drawing.Image.FromStream(stream); 
ImageResult result = new ImageResult(image, System.Drawing.Imaging.ImageFormat.Jpeg); 
return result; 
} 
return View(); 
}

这样就可以显示图片了。
下面几种方法可以显示已经存在的图片
方法一:
using System.IO; 
public FileResult Image() { 
string path = Server.MapPath("/Content/Images/Decorative/"); 
string filename = Request.Url.Segments[Request.Url.Segments.Length - 1].ToString(); 
// Uss Path.Combine from System.IO instead of StringBuilder. 
string fullPath = Path.Combine(path, filename); 
return(new FileResult(fullPath, "image/jpeg")); 
}

方法二:
public ActionResult Image(string id) 
{ 
var dir = Server.MapPath("/Images"); 
var path = Path.Combine(dir, id + ".jpg"); 
return base.File(path, "image/jpg"); 
}

方法三:
[AcceptVerbs(HttpVerbs.Get)] 
[OutputCache(CacheProfile = "CustomerImages")] 
public FileResult Show(int customerId, string imageName) 
{ 
var path = string.Concat(ConfigData.ImagesDirectory, customerId, @"\", imageName); 
return new FileStreamResult(new FileStream(path, FileMode.Open), "image/jpeg"); 
}

这三种都可以显示已经存在的图片并且我认为第三种方法可以修改为从数据库中读取图片显示。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: