ASP.NET MVC 项目中如何显示图片?

今天搞了一天的MVC,在显示图片的时候老是出现问题,从网上搜索了好久,才找到解决方法。

首先是创建一个类,继承于ActionResult,记住要引用System.Web.Mvc命名空间,如下:

 public class ImageResult :PartialViewResult
    {
        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 ViewImage(int id)
        {
            Categories data = Db.Categorie.FirstOrDefault(c => c.CategoryID == id);
            ImageConverter converter = new ImageConverter();
            var image = (Image)converter.ConvertFrom(data.Picture);
            return new ImageResult(image, ImageFormat.Jpeg);
        }

这样就可以显示图片了。

   <img src="/Categories/ViewImage/@Model.CategoryID" alt="hello" />

下面几种方法可以显示已经存在的图片 
   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");
        }

 这三种都可以显示已经存在的图片

并且我认为第三种方法可以修改为从数据库中读取图片显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值