web页面动态显示图片 本帖最后由 stone1314 于 2013-11-09 16:18:22 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 今天搞了一天的MVC,在显示图片的时候老是出现问题,从网上搜索了好久,才找到解决方法。首先是创建一个类,继承于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");}这三种都可以显示已经存在的图片并且我认为第三种方法可以修改为从数据库中读取图片显示。 T-SQL 索引怎么建 在asp.net中禁用textbox值更新的问题 怎样将gridview或datalist行列转换显示? 哪有NET版式网上考试系统下载 高手来帮我看看写的无级分类的代码,不知道哪错了 如何实现点击连接前后其颜色不变? DropDownList跳转分页怎么只停留在第一页啊 Response.AddHeader 文件名太长怎么办? 出错啦,该怎么解决呢 问一个问题 关于GridView与SQL的疑问 asp.net怎么获取html的hidden隐藏域的值
{
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");
}
这三种都可以显示已经存在的图片
并且我认为第三种方法可以修改为从数据库中读取图片显示。