zoukankan      html  css  js  c++  java
  • ASP.NET的一般处理程序对图片文件的基本操作

    以一个小项目为例:

    验证码:

    public class VerifyCodeHelper
    {
        public VerifyCodeHelper()
        {
            this.ran = new Random();
        }
    
        private Random ran = null;
        private string verifyCode;
        /// <summary>
        /// 验证码
        /// </summary>
        public string VerifyCode
        {
            get { return verifyCode; }
            set { verifyCode = value; }
        }
    
    
        /// <summary>
        /// 获取验证码图片对象
        /// </summary>
        /// <returns>System.Drawing.Image </returns>
        public System.Drawing.Image GetVerifyCode()
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder(5);
            System.Drawing.Image img = new System.Drawing.Bitmap(105, 50);//验证码图片大小
    
            using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(img))//取材
            {
                int sp = this.GetNumber(1, 3, true);
                graphics.FillRectangle(System.Drawing.Brushes.White, 0, 0, img.Width, img.Height);//填方
                graphics.DrawRectangle(new System.Drawing.Pen(System.Drawing.Color.Silver), 0, 0, img.Width - 1, img.Height - 1);//画方
                for (int i = 1; i < 5; i++)//5个字符
                {
                    using (System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.FromName(this.GetColorName())))//彩色画刷
                    {
                        string c = string.Empty;
                        sb.Append((c = this.GetChar().ToString()));
                        System.Drawing.PointF pf = this.GetPointF(sp, sp + 6, -5, 2);//由于字体的关系Point不准了,又是字符会出界,已经排除了一些字体了
                        System.Drawing.Font f = this.GetFont(34, 41);
                        //画字符
                        graphics.DrawString(c, f, b, pf);//位置要一次间隔向后
                        sp += this.GetNumber(16, 20, true);
                    }
                    using (System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.FromName(this.GetColorName())))//彩色画刷
                    {
                        //画点:位置随即了
                        for (int j = 1; j <= this.GetNumber(8, 16, true); j++)
                        {
                            graphics.DrawString(".",
                                new System.Drawing.Font(this.GetFontName(), this.GetNumber(6, 8, true)), b,
                                this.GetPointF(1, 99, 1, 39));
                        }
                    }
                    using (System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.FromName(this.GetColorName())))//彩色画刷
                    {
                        //画线:位置随即了
                        graphics.DrawLine(
                            new System.Drawing.Pen(b, this.GetNumber(1, 2, true)),
                            this.GetPointF(1, 99, 1, 39), this.GetPointF(1, 99, 1, 39));
                    }
                }
            }
            this.verifyCode = sb.ToString();
            return img;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <returns>FontName</returns>
        private string GetFontName()
        {
            System.Collections.Generic.List<string> Not = new System.Collections.Generic.List<string>();
            string[] not = { "BatangChe", "DotumChe", "GulimChe", "GungsuhChe", "Angsana New", "AngsanaUPC", "Arabic Typesetting",
                               "Browallia New", "BrowalliaUPC", "Cordia New", "CordiaUPC", "DaunPenh", "DilleniaUPC", "EucrosiaUPC",
                               "FreesiaUPC", "Gabriola","IrisUPC", "JasmineUPC","KodchiangUPC", "Kokila","LilyUPC", "Microsoft Himalaya",
                               "Microsoft Uighur", "Microsoft Yi Baiti","MoolBoran", "Nyala","Sakkal Majalla", "Segoe Script","Shonar Bangla",
                               "Utsaah","Wingdings","Cambria Math","Narkisim","Batang","Lucida Console","MT Extra","Dotum","Marlett",
                           "Mangal","Malgun Gothic","Segoe Print","Lucida Sans Unicode","DokChampa","Webdings","Latha","MV Boli"};
            Not.AddRange(not);
            System.Collections.Generic.List<string> FontNames = new System.Collections.Generic.List<string>();
            foreach (System.Drawing.FontFamily item in System.Drawing.FontFamily.Families)
            {
                if (!Not.Contains(item.Name))
                    FontNames.Add(item.Name);
            }
            return FontNames[this.GetNumber(1, FontNames.Count - 1, true)];
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="xmin"></param>
        /// <param name="xmax"></param>
        /// <param name="ymin"></param>
        /// <param name="ymax"></param>
        /// <returns>PointF</returns>
        private System.Drawing.PointF GetPointF(int xmin, int xmax, int ymin, int ymax)
        {
            return new System.Drawing.PointF(this.GetNumber(xmin, xmax, true), this.GetNumber(ymin, ymax, true));
        }
        /// <summary>
        /// 
        /// </summary>
        /// <returns>char</returns>
        private char GetChar()
        {
            char[] charItems = {'0','1','2','3','4','5','6','7','8','9',
                                   'a','b','c','d','e','f','g','h','i','j','k','l','m',
                                   'n','o','p','q','r','s','t','u','v','w','x','y','z',
                                   'A','B','C','D','E','F','G','H','I','J','K','L','M',
                                   'N','O','P','Q','R','S','T','U','V','W','X','Y','Z' };
            return charItems[this.GetNumber(0, charItems.Length - 1, true)];
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="min"></param>
        /// <param name="max"></param>
        /// <returns>Font</returns>
        private System.Drawing.Font GetFont(int min, int max)
        {
            return new System.Drawing.Font(
                this.GetFontName(),
                this.GetNumber(min, max, true),
                (System.Drawing.FontStyle)this.GetNumber(0, 2, true),
                System.Drawing.GraphicsUnit.Pixel);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <returns>ColorName</returns>
        private string GetColorName()
        {
            string[] names ={ "Aqua","Black","Blue","BlueViolet","Brown",
                              "Crimson","DarkBlue","DarkGreen","DarkMagenta","DarkOliveGreen",
                              "DarkOrange","DarkOrchid","DarkRed","DarkSlateBlue",
                              "DarkTurquoise","DarkViolet","DeepPink","DeepSkyBlue",
                              "Firebrick","Green","Indigo","LightGreen","Magenta",
                              "MediumBlue","Maroon","Navy","OrangeRed","Purple",
                              "Red","RoyalBlue","Salmon","SeaGreen","Sienna","SlateBlue","Violet"};
            return names[this.GetNumber(0, names.Length - 1, true)];
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="min"></param>
        /// <param name="max"></param>
        /// <param name="isContinue"></param>
        /// <returns>int</returns>
        private int GetNumber(int min, int max, bool isContinue)
        {
            int a;
            while (!isContinue)
                if ((a = ran.Next(min, max + 1) % 2) == 0)
                    return a;
            return ran.Next(min, max + 1);
        }
    }

    ashx文件:

    <%@ WebHandler Language="C#" Class="VerifyCode" %>
    
    using System;
    using System.Web;
    
    public class VerifyCode : IHttpHandler, System.Web.SessionState.IRequiresSessionState
    {
    
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            if (context.Request.UrlReferrer != null)
            {
                VerifyCodeHelper vc = new VerifyCodeHelper();
                using (System.Drawing.Image img = vc.GetVerifyCode())
                {
                    img.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
                }
    
                context.Response.SetCookie(new HttpCookie("code", vc.VerifyCode));
                //context.Session["code"] = vc.VerifyCode;}
            }
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

    html调用:

      验证码:<input type="text" name="txtCode" id="txtCode" /><img id="img" title="点击切换验证码" alt="验证码" src="VerifyCode.ashx" onclick="this.src='VerifyCode.ashx?ran='+new Date();" /><br />

    上传文件:

    <%@ WebHandler Language="C#" Class="Upload" %>
    
    using System;
    using System.Web;
    using System.Web.SessionState;
    public class Upload : IHttpHandler, IRequiresSessionState
    {
        private BLL.TransferAction transfer = null;
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            if (context.Session["name"] != null)
            {
                if (context.Request.Url.Query == "?ID=" + context.Session["IDCard"])
                {
                    HttpPostedFile uploadFile = context.Request.Files["txtUpload"];
    
                    if (uploadFile.ContentLength > 0 && uploadFile.ContentType.IndexOf("image") > -1)
                    {
                        //百度浏览器下只取了名字+后缀
                        string fileName = System.IO.Path.GetFileName(uploadFile.FileName);
                        //上传图片名称
                        string imgName = context.Session["IDCard"] + fileName.Substring(fileName.Length - 4);
                        //存到网站路径
                        uploadFile.SaveAs(context.Server.MapPath(context.Session["OImg"].ToString()));
                        //临时Session  小图片路径名称
                        string imgSName = "s" + imgName;
                        context.Session["imgSPath"] = "Upload/" + imgSName;
                        //生成小图
                        using (System.Drawing.Image img = ImageHelper.GetSImg(context.Server.MapPath("Upload/" + imgName)))
                        {
                            img.Save(context.Server.MapPath(context.Session["imgSPath"].ToString()));
                        }
                        transfer = new BLL.TransferAction();
                        //存入数据库URL
                        if (transfer.Update(context.Session["IDCard"].ToString(), context.Session["imgSPath"].ToString()) == 1)
                        {
                            InfoHelper.Identity.PortraitURL = context.Session["imgSPath"].ToString();
                            context.Response.Write("文件:" + fileName + "保存成功。<div style="color:Red;size:25px;30px;height:30px;" id="Info">3</div><script>var sec=3;setInterval(function(){if(sec>0){document.getElementById('Info').innerHTML=sec;sec--;}else{window.location='MyInfoList.ashx';}},1000);</script>" + "秒后跳转。");
                        }
                        else
                        {
                            context.Response.Write("文件:" + fileName + "保存失败。");
                        }
                    }
                }
                else
                {
                    string con = IOHelper.CreateInstance(context).GetFileContent("Upload.html");
                    context.Response.Write(con.Replace("XXXXXX", context.Session["IDCard"].ToString()));
                }
            }
            else
                context.Response.Redirect("HomePage.html");
        }
    
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    
    }

    html文件:

    <body>
        <form action="Upload.ashx?ID=XXXXXX" method="post" enctype="multipart/form-data">
            <input type="file" name="txtUpload"  />
            <input type="submit" value="上传" />
        </form>
    </body

    下载文件:

    <%@ WebHandler Language="C#" Class="DownLoad" %>
    
    using System;
    using System.Web;
    
    public class DownLoad : IHttpHandler,System.Web.SessionState.IRequiresSessionState
    {
    
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            if (context.Session["name"] != null && context.Request.Url.ToString().Contains("DownLoad.ashx"))
            {            
                context.Response.AddHeader("Content-Disposition", "attachment;filename="+context.Request.QueryString["filename"]);
                context.Response.WriteFile(context.Server.MapPath(context.Session["IdentityCard"].ToString()));
            }
            else
                context.Response.Redirect("HomePage.html");
        }
    
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    
    }

    html:

    string contextY = "<img src="" + context.Session["IdentityCard"].ToString() + "" alt="" + context.Session["name"].ToString() + ""/><br/><a href='DownLoad.ashx?filename="" + context.Session["IdentityCard"].ToString() + ""'>下载</a>

    相关项目文件:http://pan.baidu.com/s/1eQmopOm

  • 相关阅读:
    例程详解
    js对数组中有相似属性对象进行合并
    javaScript放大镜特效
    css改变图标颜色
    js自定义日历
    vuecli4.0配置公共scss样式文件
    iframe根据子页面的内容来设置高度
    iframe父子页面交互
    artTemplate模板自定义函数
    javascript数组的增删改和查询
  • 原文地址:https://www.cnblogs.com/wjshan0808/p/3624688.html
Copyright © 2011-2022 走看看