zoukankan      html  css  js  c++  java
  • [上传下载] C# ImageUpload图片上传类教程与源码下载 (转载)

    点击下载 ImageUpload.zip

    功能如下图片
    1.设置属性后上传图片,用法如下

        /// <summary>
        /// 图片上传类
        /// </summary>
        //----------------调用-------------------
        //imageUpload iu = new imageUpload();
        //iu.AddText = "";
        //iu.CopyIamgePath = "";
        //iu.DrawString_x = ;
        //iu.DrawString_y = ;
        //iu.DrawStyle = ;
        //iu.Font = "";
        //iu.FontSize = ;
        //iu.FormFile = File1;
        //iu.IsCreateImg =;
        //iu.IsDraw = ;
        //iu.OutFileName = "";
        //iu.OutThumbFileName = "";
        //iu.SavePath = @"~/image/";
        //iu.SaveType = ;
        //iu.sHeight  = ;
        //iu.sWidth   = ;
        //iu.Upload();
        //--------------------------------------

    代码如下

    /// <summary>
    /// 编 码 人:苏飞
    /// 联系方式:361983679  
    /// 更新网站:[url=http://www.sufeinet.com/thread-655-1-1.html]http://www.sufeinet.com/thread-655-1-1.html[/url]
    /// </summary>
    using System;
    using System.IO;
    using System.Web;
    using System.Web.UI.HtmlControls;
    using System.Drawing;
     
    namespace DotNet.Utilities
    {
        /// <summary>
        /// 文件类型
        /// </summary>
        public enum FileExtension
        {
            JPG = 255216,
            GIF = 7173,
            BMP = 6677,
            PNG = 13780,
            RAR = 8297,
            jpg = 255216,
            exe = 7790,
            xml = 6063,
            html = 6033,
            aspx = 239187,
            cs = 117115,
            js = 119105,
            txt = 210187,
            sql = 255254
        }
     
        /// <summary>
        /// 图片检测类
        /// </summary>
        public static class FileValidation
        {
            #region 上传图片检测类
            /// <summary>
            /// 是否允许
            /// </summary>
            public static bool IsAllowedExtension(HttpPostedFile oFile, FileExtension[] fileEx)
            {
                int fileLen = oFile.ContentLength;
                byte[] imgArray = new byte[fileLen];
                oFile.InputStream.Read(imgArray, 0, fileLen);
                MemoryStream ms = new MemoryStream(imgArray);
                System.IO.BinaryReader br = new System.IO.BinaryReader(ms);
                string fileclass = "";
                byte buffer;
                try
                {
                    buffer = br.ReadByte();
                    fileclass = buffer.ToString();
                    buffer = br.ReadByte();
                    fileclass += buffer.ToString();
                }
                catch { }
                br.Close();
                ms.Close();
                foreach (FileExtension fe in fileEx)
                {
                    if (Int32.Parse(fileclass) == (int)fe) return true;
                }
                return false;
            }
     
            /// <summary>
            /// 上传前的图片是否可靠
            /// </summary>
            public static bool IsSecureUploadPhoto(HttpPostedFile oFile)
            {
                bool isPhoto = false;
                string fileExtension = System.IO.Path.GetExtension(oFile.FileName).ToLower();
                string[] allowedExtensions = { ".gif", ".png", ".jpeg", ".jpg", ".bmp" };
                for (int i = 0; i < allowedExtensions.Length; i++)
                {
                    if (fileExtension == allowedExtensions)
                    {
                        isPhoto = true;
                        break;
                    }
                }
                if (!isPhoto)
                {
                    return true;
                }
                FileExtension[] fe = { FileExtension.BMP, FileExtension.GIF, FileExtension.JPG, FileExtension.PNG };
     
                if (IsAllowedExtension(oFile, fe))
                    return true;
                else
                    return false;
            }
     
            /// <summary>
            /// 上传后的图片是否安全
            /// </summary>
            /// <param name="photoFile">物理地址</param>
            public static bool IsSecureUpfilePhoto(string photoFile)
            {
                bool isPhoto = false;
                string Img = "Yes";
                string fileExtension = System.IO.Path.GetExtension(photoFile).ToLower();
                string[] allowedExtensions = { ".gif", ".png", ".jpeg", ".jpg", ".bmp" };
                for (int i = 0; i < allowedExtensions.Length; i++)
                {
                    if (fileExtension == allowedExtensions)
                    {
                        isPhoto = true;
                        break;
                    }
                }
     
                if (!isPhoto)
                {
                    return true;
                }
                StreamReader sr = new StreamReader(photoFile, System.Text.Encoding.Default);
                string strContent = sr.ReadToEnd();
                sr.Close();
                string str = "request|<script|.getfolder|.createfolder|.deletefolder|.createdirectory|.deletedirectory|.saveas|wscript.shell|script.encode|server.|.createobject|execute|activexobject|language=";
                foreach (string s in str.Split('|'))
                {
                    if (strContent.ToLower().IndexOf(s) != -1)
                    {
                        File.Delete(photoFile);
                        Img = "No";
                        break;
                    }
                }
                return (Img == "Yes");
            }
            #endregion
        }
     
        /// <summary>
        /// 图片上传类
        /// </summary>
        //----------------调用-------------------
        //imageUpload iu = new imageUpload();
        //iu.AddText = "";
        //iu.CopyIamgePath = "";
        //iu.DrawString_x = ;
        //iu.DrawString_y = ;
        //iu.DrawStyle = ;
        //iu.Font = "";
        //iu.FontSize = ;
        //iu.FormFile = File1;
        //iu.IsCreateImg =;
        //iu.IsDraw = ;
        //iu.OutFileName = "";
        //iu.OutThumbFileName = "";
        //iu.SavePath = @"~/image/";
        //iu.SaveType = ;
        //iu.sHeight  = ;
        //iu.sWidth   = ;
        //iu.Upload();
        //--------------------------------------
        public class ImageUpload
        {
            #region 私有成员
            private int _Error = 0;//返回上传状态。 
            private int _MaxSize = 1024 * 1024;//最大单个上传文件 (默认)
            private string _FileType = "jpg;gif;bmp;png";//所支持的上传类型用"/"隔开 
            private string _SavePath = System.Web.HttpContext.Current.Server.MapPath(".") + "\";//保存文件的实际路径 
            private int _SaveType = 0;//上传文件的类型,0代表自动生成文件名 
            private HtmlInputFile _FormFile;//上传控件。 
            private string _InFileName = "";//非自动生成文件名设置。 
            private string _OutFileName = "";//输出文件名。 
            private bool _IsCreateImg = true;//是否生成缩略图。 
            private bool _Iss = false;//是否有缩略图生成.
            private int _Height = 0;//获取上传图片的高度 
            private int _Width = 0;//获取上传图片的宽度 
            private int _sHeight = 120;//设置生成缩略图的高度 
            private int _sWidth = 120;//设置生成缩略图的宽度
            private bool _IsDraw = false;//设置是否加水印
            private int _DrawStyle = 0;//设置加水印的方式0:文字水印模式,1:图片水印模式,2:不加
            private int _DrawString_x = 10;//绘制文本的X坐标(左上角)
            private int _DrawString_y = 10;//绘制文本的Y坐标(左上角)
            private string _AddText = "GlobalNatureCrafts";//设置水印内容
            private string _Font = "宋体";//设置水印字体
            private int _FontSize = 12;//设置水印字大小
            private int _FileSize = 0;//获取已经上传文件的大小
            private string _CopyIamgePath = System.Web.HttpContext.Current.Server.MapPath(".") + "/images/5dm_new.jpg";//图片水印模式下的覆盖图片的实际地址
            #endregion
     
            #region 公有属性
            /// <summary>
            /// Error返回值
            /// 1、没有上传的文件
            /// 2、类型不允许
            /// 3、大小超限
            /// 4、未知错误
            /// 0、上传成功。 
            /// </summary>
            public int Error
            {
                get { return _Error; }
            }
     
            /// <summary>
            /// 最大单个上传文件
            /// </summary>
            public int MaxSize
            {
                set { _MaxSize = value; }
            }
     
            /// <summary>
            /// 所支持的上传类型用";"隔开 
            /// </summary>
            public string FileType
            {
                set { _FileType = value; }
            }
     
            /// <summary>
            /// 保存文件的实际路径 
            /// </summary>
            public string SavePath
            {
                set { _SavePath = System.Web.HttpContext.Current.Server.MapPath(value); }
                get { return _SavePath; }
            }
     
            /// <summary>
            /// 上传文件的类型,0代表自动生成文件名
            /// </summary>
            public int SaveType
            {
                set { _SaveType = value; }
            }
     
            /// <summary>
            /// 上传控件
            /// </summary>
            public HtmlInputFile FormFile
            {
                set { _FormFile = value; }
            }
     
            /// <summary>
            /// 非自动生成文件名设置。
            /// </summary>
            public string InFileName
            {
                set { _InFileName = value; }
            }
     
            /// <summary>
            /// 输出文件名
            /// </summary>
            public string OutFileName
            {
                get { return _OutFileName; }
                set { _OutFileName = value; }
            }
     
            /// <summary>
            /// 输出的缩略图文件名
            /// </summary>
            public string OutThumbFileName
            {
                get;
                set;
            }
     
            /// <summary>
            /// 是否有缩略图生成.
            /// </summary>
            public bool Iss
            {
                get { return _Iss; }
            }
     
            /// <summary>
            /// 获取上传图片的宽度
            /// </summary>
            public int Width
            {
                get { return _Width; }
            }
     
            /// <summary>
            /// 获取上传图片的高度
            /// </summary>
            public int Height
            {
                get { return _Height; }
            }
     
            /// <summary>
            /// 设置缩略图的宽度
            /// </summary>
            public int sWidth
            {
                get { return _sWidth; }
                set { _sWidth = value; }
            }
     
            /// <summary>
            /// 设置缩略图的高度
            /// </summary>
            public int sHeight
            {
                get { return _sHeight; }
                set { _sHeight = value; }
            }
     
            /// <summary>
            /// 是否生成缩略图
            /// </summary>
            public bool IsCreateImg
            {
                get { return _IsCreateImg; }
                set { _IsCreateImg = value; }
            }
     
            /// <summary>
            /// 是否加水印
            /// </summary>
            public bool IsDraw
            {
                get { return _IsDraw; }
                set { _IsDraw = value; }
            }
     
            /// <summary>
            /// 设置加水印的方式
            /// 0:文字水印模式
            /// 1:图片水印模式
            /// 2:不加
            /// </summary>
            public int DrawStyle
            {
                get { return _DrawStyle; }
                set { _DrawStyle = value; }
            }
     
            /// <summary>
            /// 绘制文本的X坐标(左上角)
            /// </summary>
            public int DrawString_x
            {
                get { return _DrawString_x; }
                set { _DrawString_x = value; }
            }
     
            /// <summary>
            /// 绘制文本的Y坐标(左上角)
            /// </summary>
            public int DrawString_y
            {
                get { return _DrawString_y; }
                set { _DrawString_y = value; }
            }
     
            /// <summary>
            /// 设置文字水印内容
            /// </summary>
            public string AddText
            {
                get { return _AddText; }
                set { _AddText = value; }
            }
     
            /// <summary>
            /// 设置文字水印字体
            /// </summary>
            public string Font
            {
                get { return _Font; }
                set { _Font = value; }
            }
     
            /// <summary>
            /// 设置文字水印字的大小
            /// </summary>
            public int FontSize
            {
                get { return _FontSize; }
                set { _FontSize = value; }
            }
     
            /// <summary>
            /// 文件大小
            /// </summary>
            public int FileSize
            {
                get { return _FileSize; }
                set { _FileSize = value; }
            }
     
            /// <summary>
            /// 图片水印模式下的覆盖图片的实际地址
            /// </summary>
            public string CopyIamgePath
            {
                set { _CopyIamgePath = System.Web.HttpContext.Current.Server.MapPath(value); }
            }
     
            #endregion
     
            #region 私有方法
            /// <summary>
            /// 获取文件的后缀名 
            /// </summary>
            private string GetExt(string path)
            {
                return Path.GetExtension(path);
            }
     
            /// <summary>
            /// 获取输出文件的文件名
            /// </summary>
            private string FileName(string Ext)
            {
                if (_SaveType == 0 || _InFileName.Trim() == "")
                    return DateTime.Now.ToString("yyyyMMddHHmmssfff") + Ext;
                else
                    return _InFileName;
            }
     
            /// <summary>
            /// 检查上传的文件的类型,是否允许上传。
            /// </summary>
            private bool IsUpload(string Ext)
            {
                Ext = Ext.Replace(".", "");
                bool b = false;
                string[] arrFileType = _FileType.Split(';');
                foreach (string str in arrFileType)
                {
                    if (str.ToLower() == Ext.ToLower())
                    {
                        b = true;
                        break;
                    }
                }
                return b;
            }
            #endregion
     
            #region 上传图片
            public void Upload()
            {
                HttpPostedFile hpFile = _FormFile.PostedFile;
                if (hpFile == null || hpFile.FileName.Trim() == "")
                {
                    _Error = 1;
                    return;
                }
                string Ext = GetExt(hpFile.FileName);
                if (!IsUpload(Ext))
                {
                    _Error = 2;
                    return;
                }
                int iLen = hpFile.ContentLength;
                if (iLen > _MaxSize)
                {
                    _Error = 3;
                    return;
                }
                try
                {
                    if (!Directory.Exists(_SavePath)) Directory.CreateDirectory(_SavePath);
                    byte[] bData = new byte[iLen];
                    hpFile.InputStream.Read(bData, 0, iLen);
                    string FName;
                    FName = FileName(Ext);
                    string TempFile = "";
                    if (_IsDraw)
                    {
                        TempFile = FName.Split('.').GetValue(0).ToString() + "_temp." + FName.Split('.').GetValue(1).ToString();
                    }
                    else
                    {
                        TempFile = FName;
                    }
                    FileStream newFile = new FileStream(_SavePath + TempFile, FileMode.Create);
                    newFile.Write(bData, 0, bData.Length);
                    newFile.Flush();
                    int _FileSizeTemp = hpFile.ContentLength;
     
                    string ImageFilePath = _SavePath + FName;
                    if (_IsDraw)
                    {
                        if (_DrawStyle == 0)
                        {
                            System.Drawing.Image Img1 = System.Drawing.Image.FromStream(newFile);
                            Graphics g = Graphics.FromImage(Img1);
                            g.DrawImage(Img1, 100, 100, Img1.Width, Img1.Height);
                            Font f = new Font(_Font, _FontSize);
                            Brush b = new SolidBrush(Color.Red);
                            string addtext = _AddText;
                            g.DrawString(addtext, f, b, _DrawString_x, _DrawString_y);
                            g.Dispose();
                            Img1.Save(ImageFilePath);
                            Img1.Dispose();
                        }
                        else
                        {
                            System.Drawing.Image image = System.Drawing.Image.FromStream(newFile);
                            System.Drawing.Image copyImage = System.Drawing.Image.FromFile(_CopyIamgePath);
                            Graphics g = Graphics.FromImage(image);
                            g.DrawImage(copyImage, new Rectangle(image.Width - copyImage.Width - 5, image.Height - copyImage.Height - 5, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel);
                            g.Dispose();
                            image.Save(ImageFilePath);
                            image.Dispose();
                        }
                    }
     
                    //获取图片的高度和宽度
                    System.Drawing.Image Img = System.Drawing.Image.FromStream(newFile);
                    _Width = Img.Width;
                    _Height = Img.Height;
     
                    //生成缩略图部分 
                    if (_IsCreateImg)
                    {
                        #region 缩略图大小只设置了最大范围,并不是实际大小
                        float realbili = (float)_Width / (float)_Height;
                        float wishbili = (float)_sWidth / (float)_sHeight;
     
                        //实际图比缩略图最大尺寸更宽矮,以宽为准
                        if (realbili > wishbili)
                        {
                            _sHeight = (int)((float)_sWidth / realbili);
                        }
                        //实际图比缩略图最大尺寸更高长,以高为准
                        else
                        {
                            _sWidth = (int)((float)_sHeight * realbili);
                        }
                        #endregion
     
                        this.OutThumbFileName = FName.Split('.').GetValue(0).ToString() + "_s." + FName.Split('.').GetValue(1).ToString();
                        string ImgFilePath = _SavePath + this.OutThumbFileName;
     
                        System.Drawing.Image newImg = Img.GetThumbnailImage(_sWidth, _sHeight, null, System.IntPtr.Zero);
                        newImg.Save(ImgFilePath);
                        newImg.Dispose();
                        _Iss = true;
                    }
     
                    if (_IsDraw)
                    {
                        if (File.Exists(_SavePath + FName.Split('.').GetValue(0).ToString() + "_temp." + FName.Split('.').GetValue(1).ToString()))
                        {
                            newFile.Dispose();
                            File.Delete(_SavePath + FName.Split('.').GetValue(0).ToString() + "_temp." + FName.Split('.').GetValue(1).ToString());
                        }
                    }
                    newFile.Close();
                    newFile.Dispose();
                    _OutFileName = FName;
                    _FileSize = _FileSizeTemp;
                    _Error = 0;
                    return;
                }
                catch (Exception ex)
                {
                    _Error = 4;
                    return;
                }
            }
            #endregion
        }
    }
  • 相关阅读:
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第4章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第3章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第1,2章 读书笔记(待更新)
    Tkinter的Message组件
    Git 实操/配置/实践
    mysq5.7.32-win安装步骤
    行为型模式之模板方法
    结构型模式之组合模式
    结构型模式之享元模式
    结构型模式之外观模式
  • 原文地址:https://www.cnblogs.com/lizeyan/p/3635701.html
Copyright © 2011-2022 走看看