zoukankan      html  css  js  c++  java
  • [转]asp.net mvc 从数据库中读取图片

    本文转自:http://www.cnblogs.com/mayt/archive/2010/05/20/1740358.html

    首先是创建一个类,继承于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");
    }
    这三种都可以显示已经存在的图片并且我认为第三种方法可以修改为从数据库中读取图片显示。
  • 相关阅读:
    Java魔法堂:类加载器入了个门
    Java魔法堂:类加载机制入了个门
    FFDshow video encoder -CLSID
    在Ubuntu下利用Eclipse调试FFmpeg《转》
    vc/vs开发的应用程序添加dump崩溃日志<转>
    Directshow 采集与FFDshow 冲突
    dshow采集过程
    innosetup 安装前、卸载前判断是否有进程正在运行<转>
    手游加速器:[求助]安卓端 手游变速器,类似光环助手的实现方式是怎样的?
    网易云音乐api资料
  • 原文地址:https://www.cnblogs.com/freeliver54/p/3794281.html
Copyright © 2011-2022 走看看