close
//生成縮略圖功能。
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;
              }
        }
    }
}


轉載自:http://kao8.cn/more.asp?name=waitme
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 11 的頭像
    11

    冠霖的部落格

    11 發表在 痞客邦 留言(0) 人氣()