上传图片生成缩略图(转)

//生成缩略图功能。
using System;
using System.IO;
using System.Web;
using System.Web.UI.HtmlControls;

namespace MyUplod
{
    /// <summary>
    /// 上传类。
    /// </summary>
    public class Upload
    {
        private int       _Error = 0;//返回上传状态。
        private int   _MaxSize = 160000;//最大单个上传文件
        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 = 80;//设置生成缩略图的高度
        private int   _sWidth = 80;//设置生成缩略图的宽度


        //Error返回值,1、没有上传的文件。2、类型不允许。3、大小超限。4、未知错误。0、上传成功。
        public int Error
        {
              get{ return _Error;}
        }
        public int MaxSize
        {
              set{ _MaxSize = value;}
        }
        public string FileType
        {
              set{_FileType = value;}
        }
        public string SavePath
        {
              set{_SavePath = System.Web.HttpContext.Current.Server.MapPath(value);}
        }
        public int SaveType
        {
              set{_SaveType = value;}
        }
        public HtmlInputFile FormFile
        {
              set{_FormFile = value;}
        }
        public string InFileName
        {
              set{_InFileName = value;}
        }
        public string OutFileName
        {
              get{return _OutFileName;}
              set{_OutFileName = value;}
        }
        public bool Iss
        {
              get{return _Iss;}
        }
        public int Width
        {
              get{return _Width;}
        }
        public int Height
        {
              get{return _Height;}
        }
        public int sWidth
        {
              get{return _sWidth;}
              set{_sWidth = value;}
        }
        public int sHeight
        {
              get{return _sHeight;}
              set{_sHeight = value;}
        }

        //获取文件的后缀名
        private string GetExt(string path)
        {
              return Path.GetExtension(path);
        }
//获取输出文件的文件名。
        private string FileName(string Ext)
        {
              if(_SaveType == 0 || _InFileName.Trim() == "")
                  return DateTime.Now.ToString("yyyyMMddHHmmssfff") + Ext;
              else
                  return _InFileName;
        }
//检查上传的文件的类型,是否允许上传。
        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;
        }
//上传主要部分。
        public void Open()
        {
              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);
                  FileStream newFile = new FileStream(_SavePath + FName, FileMode.Create);
                  newFile.Write(bData, 0, bData.Length);
                  newFile.Flush();
                  try
                  {
//获取图片的高度和宽度
                      System.Drawing.Image Img = System.Drawing.Image.FromStream(newFile);
                      _Width = Img.Width;
                      _Height = Img.Height;
//生成缩略图部分
                      if(_IsCreateImg)
                      {
//如果上传文件小于15k,则不生成缩略图。
                            if(iLen > 15360)
                            {
                                System.Drawing.Image newImg = Img.GetThumbnailImage(_sWidth, _sHeight, null, System.IntPtr.Zero);
                                newImg.Save(_SavePath + "s" + FName);
                                newImg.Dispose();
                                _Iss = true;
                            }
                      }
                  }
                  catch{}
                  newFile.Close();
                  _OutFileName = FName;
                  _Error = 0;
                  return;
              }
              catch
              {
                  _Error = 4;
                  return;
              }
        }
    }
}

posted on 2006-08-28 11:37  路人  阅读(278)  评论(0编辑  收藏  举报

导航