Asp.Net上传图片

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Configuration;
using System.Web;
using System.IO;
using System.Drawing;
using System.Web.UI;
using System.Web.UI.WebControls;



namespace Common
{
    //支持缩略图,是否等比缩放,指定像素缩放,限定上传大小,上传尺寸,图片存放路径,信息导出

    /// <summary>
    /// UploadIMG 的摘要说明
    /// </summary>
    public class UploadImg
    {

        public UploadImg()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }

        private string _MSG;
        private string _ofullname;
        private string _tfullname;
        private string _ofilename;
        private string _tfilename;
        private int _limitwidth = 2048;
        private int _limitheight = 1536;
        private int _twidth = 100;
        private int _theight = 100;
        private int _size = 1000000;
        private bool _israte = true;
        private string _path = "UpdateFile";
        #region 属性
        /// <summary>
        /// 信息
        /// </summary>
        public string MSG
        {
            get { return _MSG; }
            set { _MSG = value; }
        }
        /// <summary>
        /// 保存时的完整路径.原图
        /// </summary>
        public string OFullName
        {
            get { return _ofullname; }
            set { _ofullname = value; }
        }
        /// <summary>
        /// 保存时的完整路径.缩略图
        /// </summary>
        public string TFullName
        {
            get { return _tfullname; }
            set { _tfullname = value; }
        }
        /// <summary>
        /// 保存时的图片名称.原图
        /// </summary>
        public string OFileName
        {
            get { return _ofilename; }
            set { _ofilename = value; }
        }
        /// <summary>
        /// 保存时的图片名称.缩略图
        /// </summary>
        public string TFileName
        {
            get { return _tfilename; }
            set { _tfilename = value; }
        }
        /// <summary>
        /// 限定宽度
        /// </summary>
        public int LimitWidth
        {
            get { return _limitwidth; }
            set { _limitwidth = value; }
        }
        /// <summary>
        /// 限定高度
        /// </summary>
        public int LimitHeight
        {
            get { return _limitheight; }
            set { _limitheight = value; }
        }
        /// <summary>
        /// 缩略图宽度
        /// </summary>
        public int TWidth
        {
            get { return _twidth; }
            set { _twidth = value; }
        }
        /// <summary>
        /// 缩略图高度
        /// </summary>
        public int THeight
        {
            get { return _theight; }
            set { _theight = value; }
        }
        /// <summary>
        /// 文件大小
        /// </summary>
        public int Size
        {
            get { return _size; }
            set { _size = value; }
        }
        /// <summary>
        /// 是否成比例
        /// </summary>
        public bool IsRate
        {
            get { return _israte; }
            set { _israte = value; }
        }
        /// <summary>
        /// 存放图片的文件夹名称
        /// </summary>
        public string Path
        {
            get { return _path; }
            set { _path = value; }
        }
        #endregion
        /// <summary>
        /// 检查文件是否有效
        /// </summary>
        private bool ValidateFileAvailable(FileUpload UploadFile,out string filename)
        {
            filename = UploadFile.FileName.ToLower();
            int i = filename.LastIndexOf(".");
            filename = filename.Substring(i, filename.Length - i);
            if (!(filename == ".jpg" || filename == ".jpeg" || filename == ".gif" || filename == ".png" || filename == ".bmp"))
            {
                MSG = "不受支持的类型,请重新选择!";
                return false;
            }//检查上传文件的格式是否有效
            if (UploadFile.PostedFile.ContentLength == 0 || UploadFile.PostedFile.ContentLength >= Size)
            {
                MSG = "指定的文件大小不符合要求!";
                return false;
            }
            return true;

        }

        /// <summary>
        /// //格式化日期作为文件名
        /// </summary>
        /// <returns></returns>
        private string CreateFileName()
        {
            Random oRandom = new Random();
            string oStringRandom = oRandom.Next(9999).ToString();//生成4位随机数字
            //格式化日期作为文件名
            DateTime oDateTime = new DateTime();
            oDateTime = DateTime.Now;
            string oStringTime = oDateTime.ToString("yyyyMMddhhmmss");
            return oStringTime + oStringRandom;
 
        }

        private bool CreateImage(FileUpload UploadFile,out System.Drawing.Image oImage, out Bitmap tImage, out Graphics g)
        {
            //检查图片文件的大小
            //生成原图
            Stream oStream = UploadFile.PostedFile.InputStream;
            oImage = System.Drawing.Image.FromStream(oStream);
           

            int owidth = oImage.Width; //原图宽度
            int oheight = oImage.Height; //原图高度
            if (owidth > LimitWidth || oheight > LimitHeight)
            {
                MSG = "超过允许的图片尺寸范围!";
                tImage = new Bitmap(TWidth, THeight);
                g = Graphics.FromImage(tImage);
                return false;
            }
            //检查是否超出规定尺寸
            if (IsRate)
            {
                //按比例计算出缩略图的宽度和高度
                if (owidth >= oheight)
                {
                    THeight = (int)Math.Floor(Convert.ToDouble(oheight) * (Convert.ToDouble(TWidth) / Convert.ToDouble(owidth)));//等比设定高度
                }
                else
                {
                    TWidth = (int)Math.Floor(Convert.ToDouble(owidth) * (Convert.ToDouble(THeight) / Convert.ToDouble(oheight)));//等比设定宽度
                }
            }
            //生成缩略原图
            tImage = new Bitmap(TWidth, THeight);
            g = Graphics.FromImage(tImage);
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; //设置高质量插值法
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;//设置高质量,低速度呈现平滑程度
            g.Clear(Color.Transparent); //清空画布并以透明背景色填充
            g.DrawImage(oImage, new Rectangle(0, 0, TWidth, THeight), new Rectangle(0, 0, owidth, oheight), GraphicsUnit.Pixel);
            return true;
        }

        private bool SaveImage(string filename, string OFileName, string TFileName, System.Drawing.Image oImage, Bitmap tImage)
        {
            switch (filename)
            {
                case ".jpeg":
                case ".jpg":
                    {
                        oImage.Save(OFullName, System.Drawing.Imaging.ImageFormat.Jpeg);
                        tImage.Save(TFullName, System.Drawing.Imaging.ImageFormat.Jpeg);
                        break;
                    }
                case ".gif":
                    {
                        oImage.Save(OFullName, System.Drawing.Imaging.ImageFormat.Gif);
                        tImage.Save(TFullName, System.Drawing.Imaging.ImageFormat.Gif);
                        break;
                    }
                case ".png":
                    {
                        oImage.Save(OFullName, System.Drawing.Imaging.ImageFormat.Png);
                        tImage.Save(TFullName, System.Drawing.Imaging.ImageFormat.Png);
                        break;
                    }
                case ".bmp":
                    {
                        oImage.Save(OFullName, System.Drawing.Imaging.ImageFormat.Bmp);
                        tImage.Save(TFullName, System.Drawing.Imaging.ImageFormat.Bmp);
                        break;
                    }
            }
            return true;
        }
        /// <summary>
        /// 图片上传(默认:"等比压缩,限定上传尺寸2048*1536,缩略图尺寸100*100,限定上传大小1MB,存放在根目录UpdateFile中")
        /// </summary>
        /// <param name="UploadFile">文件上传控件</param>
        /// <returns>返回是否成功保存图片</returns>
        public bool UpLoadIMG(FileUpload UploadFile)
        {
            if (UploadFile.HasFile)//检查是否已经选择文件
            {
                string filename = "filename";
                if(!ValidateFileAvailable(UploadFile,out filename)) return false;

                System.Drawing.Image oImage;
                Bitmap tImage = new Bitmap(TWidth, THeight);
                Graphics g = Graphics.FromImage(tImage);
                if(!CreateImage(UploadFile, out oImage, out tImage, out g)) return false;

                string StringName  = CreateFileName();
                OFileName = "o" + StringName + filename;
                TFileName = "t" + StringName + filename;
                string oSavePath = HttpContext.Current.Server.MapPath("~") + Path + "\\";

                if (!Directory.Exists(oSavePath))
                {
                    Directory.CreateDirectory(oSavePath);//在根目录下建立文件夹
                }
                //保存路径+完整文件名
                OFullName = oSavePath + OFileName;
                TFullName = oSavePath + TFileName;
                //开始保存图片至服务器
                try
                {
                    SaveImage(filename, OFullName, TFullName, oImage, tImage);
                    MSG = "图片上传成功!";
                    return true;
                }
                catch (Exception ex)
                {
                    MSG = ex.Message;
                    return false;
                }
                finally
                {
                    //释放资源
                    oImage.Dispose();
                    g.Dispose();
                    tImage.Dispose();
                }
            }
            else
            {
                MSG = "请先选择需要上传的图片!";
                return false;
            }
        }
    }

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值