zoukankan      html  css  js  c++  java
  • asp.net 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");
    } 

    这三种都可以显示已经存在的图片并且我认为第三种方法可以修改为从数据库中读取图片显示。

  • 相关阅读:
    gulp打包js/css时合并成一个文件时的顺序解决
    gulp错误GulpUglifyError: unable to minify JavaScript解决
    日志平台中心建议
    Spring Boot整合Quartz实现定时任务表配置
    阿里云Centos7使用yum安装MySQL5.6的正确姿势
    Servlet、Filter
    Android java.lang.IllegalArgumentException: Object returned from onCreateLoader must not be a non-static inn
    Android中CursorLoader的使用、原理及注意事项
    Android LoaderManager与CursorLoader用法
    Android 用SQLite 使用 CursorLoader 中的数据填充列表视图
  • 原文地址:https://www.cnblogs.com/hnsongbiao/p/4456999.html
Copyright © 2011-2022 走看看