工具库(常用函数) _comm.cs
[作者]:菩提树下的杨过 [来源]:互联网 [收录时间]:2007-7-21 15:31:59

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using System.Drawing;

/// <summary>
/// 常用函数库
/// </summary>
///
namespace cpp114.tools.comm
{

    public class tools : System.Web.UI.Page
    {       
        private HttpResponse oresponse;
        private HttpRequest orequest;

        public tools(HttpResponse myResponse, HttpRequest myRequest)
        {
            this.oResponse = myResponse;//只能这样,其它页面调用Tools类时的Response.write才能响应(本质上讲,请求的是其它页面,而非comm.cs)
            this.oRequest = myRequest;
        }


        /// <summary>
        /// 生成缩略图
        /// </summary>
        /// <param name="originalImagePath">源图路径(物理路径)</param>
        /// <param name="thumbnailPath">缩略图路径(物理路径)</param>
        /// <param name="width">缩略图宽度</param>
        /// <param name="height">缩略图高度</param>
        /// <param name="mode">生成缩略图的方式</param>   
        public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
        {
            System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);

            int towidth = width;
            int toheight = height;

            int x = 0;
            int y = 0;
            int ow = originalImage.Width;
            int oh = originalImage.Height;

            switch (mode)
            {
                case "HW"://指定高宽缩放(可能变形)              
                    break;
                case "W"://指定宽,高按比例                  
                    toheight = originalImage.Height * width / originalImage.Width;
                    break;
                case "H"://指定高,宽按比例
                    towidth = originalImage.Width * height / originalImage.Height;
                    break;
                case "Cut"://指定高宽裁减(不变形)              
                    if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
                    {
                        oh = originalImage.Height;
                        ow = originalImage.Height * towidth / toheight;
                        y = 0;
                        x = (originalImage.Width - ow) / 2;
                    }
                    else
                    {
                        ow = originalImage.Width;
                        oh = originalImage.Width * height / towidth;
                        x = 0;
                        y = (originalImage.Height - oh) / 2;
                    }
                    break;
                default:
                    break;
            }

            //新建一个bmp图片
            System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);

            //新建一个画板
            Graphics g = System.Drawing.Graphics.FromImage(bitmap);

            //设置高质量插值法
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

            //设置高质量,低速度呈现平滑程度
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

            //清空画布并以透明背景色填充
            g.Clear(Color.Transparent);

            //在指定位置并且按指定大小绘制原图片的指定部分
            g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
                new Rectangle(x, y, ow, oh),
                GraphicsUnit.Pixel);

            try
            {
                //以jpg格式保存缩略图
                bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
            }

            catch (System.Exception e)
            {
                throw e;
            }
            finally
            {
                originalImage.Dispose();
                bitmap.Dispose();
                g.Dispose();
            }
        }


        //自动生成文件名(不含扩展名)
        public static string autoFileName()
        {
            return DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString().PadLeft(2, '0') +
                DateTime.Now.Day.ToString().PadLeft(2, '0') + DateTime.Now.Hour.ToString().PadLeft(2, '0') +
                DateTime.Now.Minute.ToString().PadLeft(2, '0') + DateTime.Now.Second.ToString().PadLeft(2, '0') +
                DateTime.Now.Millisecond.ToString().PadLeft(3, '0');
        }

        //功能:在虚拟路径virtualpath下创建一个yyyy/mm/dd的三层目录
        //   在上传文件,分"年/月/日"目录存放时用到
        //返回:创建后的虚拟路径
        //编写:杨俊明 Email:yjmyzz@126.com 2006-04-28
        public string makeDirByDay(string virturlPath)
        {
            string sYear = DateTime.Now.Year.ToString();
            string sMonth = DateTime.Now.Month.ToString();
            string sDay = DateTime.Now.Day.ToString();
            string folderName = "";

            folderName = Server.MapPath(virturlPath);
            folderName.Replace("//", "/");
            if (!Directory.Exists(folderName))
            {
                Directory.CreateDirectory(folderName);
            }

            folderName = Server.MapPath(virturlPath + "/" + sYear);
            folderName.Replace("//", "/");
            if (!Directory.Exists(folderName))
            {
                Directory.CreateDirectory(folderName);
            }

            folderName = Server.MapPath(virturlPath + "/" + sYear + "/" + sMonth.PadLeft(2, '0'));
            folderName.Replace("//", "/");
            if (!Directory.Exists(folderName))
            {
                Directory.CreateDirectory(folderName);
            }

            folderName = Server.MapPath(virturlPath + "/" + sYear + "/" + sMonth.PadLeft(2, '0') + "/" + sDay.PadLeft(2, '0'));
            folderName.Replace("//", "/");
            if (!Directory.Exists(folderName))
            {
                Directory.CreateDirectory(folderName);
            }

            string returnstr;
            returnstr = virturlPath + "/" + sYear + "/" + sMonth.PadLeft(2, '0') + "/" + sDay.PadLeft(2, '0') + "/";
            returnstr = returnstr.Replace("//", "/");
            return returnstr;
        }

        //功能:在虚拟路径virtualpath下创建一个yyyy/mm的二层目录
        //   在上传文件,分"年/月"目录存放时用到
        //返回:创建后的虚拟路径
        //编写:杨俊明 Email:yjmyzz@126.com 2006-04-28
        public string makeDirByMonth(string virturlPath)
        {
            string sYear = DateTime.Now.Year.ToString();
            string sMonth = DateTime.Now.Month.ToString();
            string folderName = "";

            folderName = Server.MapPath(virturlPath);
            folderName.Replace("//", "/");
            if (!Directory.Exists(folderName))
            {
                Directory.CreateDirectory(folderName);
            }

            folderName = Server.MapPath(virturlPath + "/" + sYear);
            folderName.Replace("//", "/");
            if (!Directory.Exists(folderName))
            {
                Directory.CreateDirectory(folderName);
            }

            folderName = Server.MapPath(virturlPath + "/" + sYear + "/" + sMonth.PadLeft(2, '0'));
            folderName.Replace("//", "/");
            if (!Directory.Exists(folderName))
            {
                Directory.CreateDirectory(folderName);
            }

            string returnstr;
            returnstr = virturlPath + "/" + sYear + "/" + sMonth.PadLeft(2, '0') + "/";
            returnstr = returnstr.Replace("//", "/");
            return returnstr;
        }

        //功能:在虚拟路径virtualpath下创建一个yyyy的目录
        //   在上传文件,分"年"目录存放时用到
        //返回:创建后的虚拟路径
        //编写:杨俊明 Email:yjmyzz@126.com 2006-04-28
        public string makeDirByYear(string virturlPath)
        {
            string sYear = DateTime.Now.Year.ToString();
            string sMonth = DateTime.Now.Month.ToString();
            string folderName = "";

            folderName = Server.MapPath(virturlPath);
            folderName.Replace("//", "/");
            if (!Directory.Exists(folderName))
            {
                Directory.CreateDirectory(folderName);
            }

            folderName = Server.MapPath(virturlPath + "/" + sYear);
            folderName.Replace("//", "/");
            if (!Directory.Exists(folderName))
            {
                Directory.CreateDirectory(folderName);
            }

            string returnstr;
            returnstr = virturlPath + "/" + sYear + "/";
            returnstr = returnstr.Replace("//", "/");
            return returnstr;
        }

 

        //返回一个alert对话框的html字符串
        //示例: Response.Write(Alert("登录成功!"),"index.aspx")
        public void Alert(string str, string url)
        {
            if (url == "")
            {
                oresponse.Write("<script>alert('" + str + "')</script>");
            }
            else
            {
                oresponse.Write("<script>alert('" + str + "');window.location='" + url + "'</script>");
            }
        }

        public static string getSafeStr(string str)
        {
            str = str.Replace("'", "");
            str = str.Replace(";", "");
            str = str.Replace("=", "");
            str = str.Replace("--", "");           
            return str;
        }


        //去掉html代码
        public static string noHtml(string str, int strlen)
        {
            //去除html代码后,再截取
            Regex re = new Regex("<(.[^>]*)>");
            str = re.Replace(str, "");
            return cutStr(str, strlen);

        }

        //过滤html中的指定标签,多个标签用,分隔,比如script,object(这也是默认值)
        public static string superFilter(string html, string filter)
        {
            filter = filter.Trim();
            if (filter == "")
            {
                filter = "script,object,iframe,frame";
            }

            string[] strs = filter.Split(',');

            for (int i = 0; i < strs.Length; i++)
            {
                html = filterHtml(html, strs[i]);
            }
            return html;
        }


        //功能:过滤html代码中的指定标记
        //参数:html----要处理的html内容
        //     filter--要处理的标记(如"SCRIPT")
        protected static string filterHtml(string html, string filter)
        {
            switch (filter.ToUpper())
            {
                // 去除所有客户端脚本javascipt,vbscript,jscript,js,vbs,event,...
                case "SCRIPT":
                    html = RegExec(html, "</?script[^>]*>");
                    html = RegExec(html, "(javascript|jscript|vbscript|vbs):");
                    html = RegExec(html, "on(mouse|exit|error|click|key)");
                    html = RegExec(html, "&#");
                    break;
                //去除Object对象,比如flash
                case "OBJECT":
                    html = RegExec(html, "</?object[^>]*>");
                    html = RegExec(html, "</?param[^>]*>");
                    html = RegExec(html, "</?embed[^>]*>");
                    break;
                //去除img图象标签
                case "IMG":
                    html = RegExec(html, "</?img[^>]*>");
                    break;
                //去除FONT标签
                case "FONT":
                    html = RegExec(html, "</?font[^>]*>");
                    break;
                //去除跑马灯效果
                case "MARQUEE":
                    html = RegExec(html, "</?marquee[^>]*>");
                    break;
                //去除表格<table><tr><td><th>
                case "TABLE":
                    html = RegExec(html, "</?table[^>]*>");
                    html = RegExec(html, "</?tr[^>]*>");
                    html = RegExec(html, "</?th[^>]*>");
                    html = RegExec(html, "</?td[^>]*>");
                    break;
                //去除段落标记
                case "P":
                    html = RegExec(html, "</?p[^>]*>");
                    break;
                //去除超级链接标记
                case "A":
                    html = RegExec(html, "</?a[^>]*>");
                    break;
                //去除iframe
                case "IFRAME":
                    html = RegExec(html, "</?iframe[^>]*>");
                    break;
                //去除frame
                case "FRAME":
                    html = RegExec(html, "</?frame[^>]*>");
                    break;
                //默认去除所有的html标记
                default:
                    html = RegExec(html, "<(.[^>]*)>");
                    break;

            }
            return html;
        }

        private static string RegExec(string src, string regExpress)
        {
            Regex re = new Regex(regExpress, RegexOptions.IgnoreCase);
            src = re.Replace(src, "");
            return src;
        }

        //截取字符串
        public static string cutStr(string inputString, int len)
        {

            ASCIIEncoding ascii = new ASCIIEncoding();
            int tempLen = 0;
            string tempString = "";
            byte[] s = ascii.GetBytes(inputString);
            for (int i = 0; i < s.Length; i++)
            {
                if ((int)s[i] == 63)
                {
                    tempLen += 2;
                }
                else
                {
                    tempLen += 1;
                }

                try
                {
                    tempString += inputString.Substring(i, 1);
                }
                catch
                {
                    break;
                }

                if (tempLen > len)
                    break;
            }
            //如果截过则加上半个省略号
            byte[] mybyte = System.Text.Encoding.Default.GetBytes(inputString);
            if (mybyte.Length > len)
                tempString += "…";
            return tempString;
        }

        //功能:显示分页导航
        //参数:totalCount--总记录数
        //     totalPage---总页数
        //     pageNumber--导航栏上显示多少个分页链接
        //     myPageSize--每页记录数
        //     Page--------当前页数
        //     Style----如果为text,则显示页码跳转输入文本框
        //编写:杨俊明 2006-04-27
        public string showPage(int totalCount, int totalPage, int pageNumber, int myPageSize, int Page, string Style)
        {

            string url, parm, returnstr;
            int i, s_mid;
            url = "";
            parm = "";
            i = 0;
            s_mid = 0;
            if (totalPage <= 1) { return ""; }
            if (Page < 1) { Page = 1; }
            if (Page > totalPage) { Page = totalPage; }
            if (Style.Trim() == "") { Style = "none"; }
            url = orequest.ServerVariables["url"];
            parm = orequest.ServerVariables["Query_String"];
            parm = delParm(parm, "page");
            if (parm != "")
            {
                url = url + "?" + parm + "&";
            }
            else
            {
                url = url + "?";
            }


            returnstr = "";
            returnstr = "<table width='100%' align=center border=0 cellpadding=0 celspacing=0><tr><td align=left>共有<font color=red>" + Convert.ToInt32(totalCount) + "</font>条,第<font color=red>" + Convert.ToInt32(Page) + "</font>页/共<font color=red>" + Convert.ToInt32(totalPage) + "</font>页,<font color=red>" + Convert.ToInt32(myPageSize) + "</font>/每页</td><td align=right>";
            //处理首页问题
            if (Page > 1)
            {
                returnstr += "<a href='" + url + "page=1' title='首页'>";
                returnstr += "<img src='./images/first.gif' align=absmiddle border=0></a>";
            }

            s_mid = 0;
            s_mid = Convert.ToInt32(pageNumber / 2);
            if (pageNumber % 2 != 0)
            {
                s_mid = s_mid + 1;
            }

            //处理中间页码的生成
            if ((Page <= totalPage) && (Page >= s_mid))
            {
                for (i = Page - s_mid + 1; i <= Page - s_mid + pageNumber; i++)
                {
                    if (i <= totalPage)
                    {
                        if (i == Page)
                        {
                            returnstr += "&nbsp;<font color=red>[" + Convert.ToInt32(i) + "]</font>";
                        }
                        else
                        {
                            returnstr += "&nbsp;<a href='" + url + "page=" + Convert.ToInt32(i) + "'>" + Convert.ToInt32(i) + "</a>";
                        }
                    }
                }
            }

            //第一页时的中间页码生成问题
            if ((Page >= 1) && (Page < s_mid))
            {
                for (i = 1; i <= pageNumber; i++)
                {
                    if (i <= totalPage)
                    {
                        if (i == Page)
                        {
                            returnstr += "&nbsp;<font color=red>[" + Convert.ToInt32(i) + "]</font>";
                        }
                        else
                        {
                            returnstr += "&nbsp;<a href='" + url + "page=" + Convert.ToInt32(i) + "'>" + Convert.ToInt32(i) + "</a>";
                        }
                    }
                }
            }

            //不是最后一页
            if (Page < totalPage)
            {

                returnstr += "&nbsp;<a href='" + url + "page=" + totalPage + "' title='尾页'>";
                returnstr += "<img src='./images/last.gif' align=absmiddle border=0></a>";
            }

            returnstr += "</td>";
            if (Style == "text")
            {
                if ((url.Substring(url.Length - 1, 1) == "?") || (url.Substring(url.Length - 1, 1) == "&"))
                {
                    url = url.Substring(0, url.Length - 1);
                }
                returnstr += "<td width=40 align=right><input runat=server size=1 name='page' id='page' value='" + Page + "' style='border:1px inset #808080; font-size: 9pt'></td></tr></table>";
            }
            else
            {
                returnstr += "</tr></table>";
            }

            //oResponse.Write(returnstr);
            return returnstr;
        }

        //删除网页参数中的指定项
        //delParm("abc=3&name=jimmy&sex=male","name") 结果为abc=3&sex=male
        public static string delParm(string parm, string delpart)
        {
            int i = 0;
            string parmFront, parmBack, returnstr;
            parmFront = "";
            parmBack = "";
            returnstr = "";
            //returnstr = "<br>";
            //returnstr = parm;
            i = parm.IndexOf(delpart);
            if (i != -1)
            {
                if (i > 1)
                {
                    parmFront = parm.Substring(0, i - 1);
                }
                else
                {
                    parmFront = "";
                }

                parm = parm.Substring(i, parm.Length - i);

                //returnstr += "<br>parmFront : <br> " + parmFront;
                //returnstr += "<br>parm : <br> " + parm;

                i = parm.IndexOf("&");
                if (i != -1)
                {
                    parmBack = parm.Substring(i + 1, parm.Length - i - 1);

                }
                else
                {
                    parmBack = "";
                }

                //returnstr += "<br>parmBack : <br> " + parmBack;
            }
            else
            {
                returnstr = parm;
            }

            if ((parmFront != "") && (parmBack != ""))
            {
                returnstr = parmFront + "&" + parmBack;
            }
            else
            {
                returnstr = parmFront + parmBack;
            }
            return returnstr;
        }

    }

}

 

引用该cs时,可以这样写

using cpp114.tools.comm;