网站技术
当前目录:首页 >> 新闻中心 >> 网站技术

【原创】上传操作类

发布人:卓伟软件
发布日期:2014-05-12 10:36:47
浏览次数:1231

using System;

using System.Collections.Generic;

using System.Web;

using System.Text;

using System.Text.RegularExpressions;

using System.IO;

using System.Drawing;

namespace AS.Public

{

   /// <summary>

   /// 上传文件操作类

   /// 作者:Jacky QQ:7092734 Email:jacky@d369.net

   /// 网址:http://www.d369.net

   /// Version : 1.0

   /// 转载请保留版权和转载处,谢谢!

   /// </summary>

   public class UpLoadFile

   {

       /// <summary>

       /// 无参构造器

       /// </summary>

       public UpLoadFile() { }

       #region 属性

       /// <summary>

       /// 最大上传文件大小

       /// </summary>

       private int _MaxSize = 100;

       /// <summary>

       /// 最大上传文件大小

       /// </summary>

       public int MaxSize { get { return _MaxSize; } set { _MaxSize = value; } }

       /// <summary>

       /// 允许上传文件类型

       /// </summary>

       private string _FileType = "jpg|jpeg|gif|bmp";

       /// <summary>

       /// 允许上传文件类型

       /// </summary>

       public string FileType { get { return _FileType; } set { _FileType = value.Replace(",", "|"); } }

       /// <summary>

       /// 是否删除临时文件

       /// </summary>

       private Boolean _isDelTempFile = true;

       /// <summary>

       /// 是否删除临时文件

       /// </summary>

       public Boolean isDelTempFile { get { return _isDelTempFile; } set { _isDelTempFile = value; } }

       /// <summary>

       /// 是否打水印

       /// </summary>

       private Boolean _isWater = false;

       /// <summary>

       /// 是否打水印

       /// </summary>

       public Boolean isWater { get { return _isWater; } set { _isWater = value; } }

       /// <summary>

       /// 文字水印信息

       /// </summary>

       private string _WaterText = "";

       /// <summary>

       /// 文字水印信息

       /// </summary>

       public string WaterText { get { return _WaterText; } set { _WaterText = value; } }

       /// <summary>

       /// 图片水印路径

       /// </summary>

       private string _WaterImage = "";

       /// <summary>

       /// 图片水印路径

       /// </summary>

       public string WaterImage { get { return _WaterImage; } set { _WaterImage = value; } }

       /// <summary>

       /// 文字大小

       /// </summary>

       private int _FontWeight = 32;

       /// <summary>

       /// 文字大小

       /// </summary>

       public int FontWeigth { get { return _FontWeight; } set { _FontWeight = value; } }

       /// <summary>

       /// 文字颜色

       /// </summary>

       private string _FontColor = "#000000";

       /// <summary>

       /// 文字颜色

       /// </summary>

       public string FontColor { get { return _FontColor; } set { _FontColor = value; } }

       /// <summary>

       /// 文字字体

       /// </summary>

       private string _FontFamily = "Arial";

       /// <summary>

       /// 文字字体

       /// </summary>

       public string FontFamily { get { return _FontFamily; } set { _FontFamily = value; } }

       /// <summary>

       /// 是文字水印还是图片水平 true是文字水印 false是图片文印

       /// </summary>

       private Boolean _isWaterTextOrImage = true;

       /// <summary>

       /// 是文字水印还是图片水平 true是文字水印 false是图片文印

       /// </summary>

       public Boolean isWaterTextOrImage { get { return _isWaterTextOrImage; } set { _isWaterTextOrImage = value; } }

       /// <summary>

       /// 打水印位置 0:正中间 1:左上角 2:右上角 3:左下角 4:右下角

       /// </summary>

       private int textAlign = 4;

       /// <summary>

       /// 打水印位置 0:正中间 1:左上角 2:右上角 3:左下角 4:右下角

       /// </summary>

       public int TextAlign { get { return textAlign; } set { textAlign = value; } }

       /// <summary>

       /// 客户端上传文件集

       /// </summary>

       private HttpFileCollection _HttpFiles = null;

       /// <summary>

       /// 客户端上传文件集

       /// </summary>

       public HttpFileCollection HttpFiles { get { return _HttpFiles; } set { _HttpFiles = value; } }

       /// <summary>

       /// 文件数量

       /// </summary>

       private int _FileCount = 0;

       /// <summary>

       /// 文件数量

       /// </summary>

       public int FileCount { get { return _FileCount; } set { _FileCount = value; } }

       /// <summary>

       /// 上传信息

       /// </summary>

       private string[] _Message;

       /// <summary>

       /// 上传信息

       /// </summary>

       public string[] Message { get { return _Message; } set { _Message = value; } }

       /// <summary>

       /// 文件大小

       /// </summary>

       private int[] _FileSize;

       /// <summary>

       /// 文件大小

       /// </summary>

       public int[] FileSize { get { return _FileSize; } set { _FileSize = value; } }

       /// <summary>

       /// 上传到服务器端的保存文件路径

       /// </summary>

       private string[] _SourcePath;

       /// <summary>

       /// 上传到服务器端的保存文件路径

       /// </summary>

       public string[] SourcePath { get { return _SourcePath; } set { _SourcePath = value; } }

       /// <summary>

       /// 上传到服务器端的相对文件路径

       /// </summary>

       private string[] _BasePath;

       /// <summary>

       /// 上传到服务器端的相对文件路径

       /// </summary>

       public string[] BasePath { get { return _BasePath; } set { _BasePath = value; } }

       /// <summary>

       /// 文件保存路径

       /// </summary>

       private string _SavePath = "";

       /// <summary>

       /// 文件保存路径

       /// </summary>

       public string SavePath { get { return _SavePath; } set { _SavePath = value; } }

       /// <summary>

       /// 路径格式

       /// </summary>

       private string _PathFormat = "yyyy-MM-dd";

       /// <summary>

       /// 路径格式

       /// </summary>

       public string PathFormat { get { return _PathFormat; } set { _PathFormat = value; } }

       /// <summary>

       /// 上传成功文件个数

       /// </summary>

       private int _SuccessFileCount = 0;

       /// <summary>

       /// 上传成功文件个数

       /// </summary>

       public int SuccessFileCount { get { return _SuccessFileCount; } set { _SuccessFileCount = value; } }

       /// <summary>

       /// 是否生成缩略图

       /// </summary>

       private Boolean _isThumbnail = false;

       /// <summary>

       /// 是否生成缩略图

       /// </summary>

       public Boolean isThumbnail { get { return _isThumbnail; } set { _isThumbnail = value; } }

       /// <summary>

       /// 缩略图宽度

       /// </summary>

       private int _tWidth = 100;

       /// <summary>

       /// 缩略图宽度

       /// </summary>

       public int tWidth { get { return _tWidth; } set { _tWidth = value; } }

       /// <summary>

       /// 缩略图高度

       /// </summary>

       private int _tHeight = 100;

       /// <summary>

       /// 缩略图高度

       /// </summary>

       public int tHeight { get { return _tHeight; } set { _tHeight = value; } }

       /// <summary>

       /// X坐标(zoom为1时)

       /// </summary>

       private int _tPosX = 0;

       /// <summary>

       /// X坐标(zoom为1时)

       /// </summary>

       public int tPosX { get { return _tPosX; } set { _tPosX = value; } }

       /// <summary>

       /// Y坐标(zoom为1时)

       /// </summary>

       private int _tPosY = 0;

       /// <summary>

       /// Y坐标(zoom为1时)

       /// </summary>

       public int tPosy { get { return _tPosY; } set { _tPosY = value; } }

       /// <summary>

       /// 生成缩略图模式 指定字符串"WH"指定宽高缩放(可能变形),"W"指定宽缩放,"H"指定高缩放,"Cut"指定高宽裁减(不变形),"EQ" 指定宽高等比例缩放(不变形)

       /// </summary>

       private string _tModeType = "WH";

       /// <summary>

       /// 生成缩略图模式 指定字符串"WH"指定宽高缩放(可能变形),"W"指定宽缩放,"H"指定高缩放,"Cut"指定高宽裁减(不变形),"EQ" 指定宽高等比例缩放(不变形)

       /// </summary>

       public string tModeType { get { return _tModeType; } set { _tModeType = value; } }

       /// <summary>

       /// 生成缩略图方式 0为直接生成 1为切割后生成

       /// </summary>

       private int _tMode = 0;

       /// <summary>

       /// 生成缩略图方式 0为直接生成 1为切割后生成

       /// </summary>

       public int tMode { get { return _tMode; } set { _tMode = value; } }

       /// <summary>

       /// 是否验证文件头类型

       /// </summary>

       private Boolean _isValidateMIME = true;

       /// <summary>

       /// 是否验证文件头类型

       /// </summary>

       public Boolean isValidateMIME { get { return this._isValidateMIME; } set { this._isValidateMIME = value; } }

       #endregion


       #region 方法

       /// <summary>

       /// 上传入口

       /// </summary>

       public void UpLoad()

       {

           this.HttpFiles = this.HttpFiles == null ? System.Web.HttpContext.Current.Request.Files : this.HttpFiles;

           this.FileCount = this.HttpFiles.Count;

           this.Message = new string[this.FileCount];

           this.FileSize = new int[this.FileCount];

           this.SourcePath = new string[this.FileCount];

           this.BasePath = new string[this.FileCount];

           if (this.FileCount == 0) { this.Message[0] = "请选择要上传的文件."; return; }

           /*处理保存路径*/

           string RootPath = "";

           if (this.SavePath != "")

           {

               RootPath = System.AppDomain.CurrentDomain.BaseDirectory + Regex.Replace(this.SavePath, @"/", @"\", RegexOptions.IgnoreCase) + @"\";

               if (!Directory.Exists(RootPath)) Directory.CreateDirectory(RootPath);

           }

           if (this.PathFormat != "")

           {

               this.SavePath = this.SavePath.TrimEnd('/') + @"/" + DateTime.Now.ToString(this.PathFormat) + @"/";

               RootPath += DateTime.Now.ToString(this.PathFormat).Replace("/", "\\") + @"\";

               if (!Directory.Exists(RootPath)) Directory.CreateDirectory(RootPath);

           }

           Random ran = new Random();

           string NewFileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "_{0}.{1}";

           for (int i = 0; i < this.HttpFiles.Count; i++)

           {

               HttpPostedFile HttpFile = this.HttpFiles[i];

               if (HttpFile.ContentLength == 0 || string.IsNullOrEmpty(HttpFile.FileName)) continue;

               string FullFileName = Path.GetFileName(HttpFile.FileName);

               string fileType = Path.GetExtension(HttpFile.FileName).TrimStart('.');

               if (!Regex.IsMatch(fileType, @"(" + this.FileType + ")", RegexOptions.IgnoreCase)) { this.Message[i] = "UpLoadFailure:上传的文件扩展名暂不允许上传.<br>[" + FullFileName + "]<br>允许上传文件扩展名:" + this.FileType + ""; continue; }

               if (this.isValidateMIME && !isMIME(fileType, HttpFile.ContentType)) { this.Message[i] = "UpLoadFailure:上传的文件头类型不正确.<br>[" + FullFileName + "]"; continue; }

               this.FileSize[i] = HttpFile.ContentLength;

               if (this.FileSize[i] > this.MaxSize) { this.Message[i] = "UpLoadFailure:上传文件超过系统限定大小.<br>[" + FullFileName + "]<br>允许最大上传为:" + (this.MaxSize / 1024).ToString() + "K"; continue; }

               string newFileName = "";

               if (this.FileCount == 1)

                   newFileName = String.Format(NewFileName, ran.Next(1000, 9999), fileType);

               else

                   newFileName = String.Format(NewFileName, (i + 1).ToString("D3"), fileType);

               try

               {

                   this.Message[i] = "UpLoadSuccess.[" + FullFileName + "]";

                   HttpFile.SaveAs(RootPath + newFileName);

                   this.SuccessFileCount++;

                   this.SourcePath[i] = RootPath + newFileName;

                   this.BasePath[i] = this.SavePath + newFileName;

                   if (this.isWater)

                   {

                       ImageWater water = new ImageWater();

                       water.WaterText = this.WaterText;

                       water.WaterImagePath = this.WaterImage.IndexOf("\\") > 0 ? this.WaterImage : (AppDomain.CurrentDomain.BaseDirectory + @"" + Regex.Replace(this.WaterImage, @"/", @"\", RegexOptions.IgnoreCase));

                       water.FontSize = this.FontWeigth;

                       water.FontColor = XiaoFeng.Function.ColorHx16toRGB(this.FontColor);

                       water.FontFamily = this.FontFamily;

                       water.ImagePath = this.SourcePath[i];

                       water.NewImagePath = RootPath + "s" + newFileName;

                       water.isDelTempFile = this.isDelTempFile;

                       water.TextAlign = this.TextAlign;

                       if (this._isWaterTextOrImage)

                       {

                           if (!water.AddText())

                           {

                               this.Message[i] = "WaterFailure:" + water.ErrMessage + "<br>[" + FullFileName + "]";

                           }

                       }

                       else

                       {

                           if (!water.AddImage())

                           {

                               this.Message[i] = "WaterFailure:" + water.ErrMessage + "<br>[" + FullFileName + "]";

                           }

                       }

                   }

                   if (this.isThumbnail)

                   {

                       ImageThumbnail img = new ImageThumbnail();

                       img.SourcePath = this.SourcePath[i];

                       img.TargetPath = RootPath + newFileName.Replace(".", "_s.");

                       img.PosX = this.tPosX;

                       img.PosY = this.tPosy;

                       img.ModeType = this.tModeType;

                       img.Width = this.tWidth;

                       img.Height = this.tHeight;

                       if (this.tMode == 0)

                           img.MakeThumbnail();

                       else if (this.tMode == 1)

                           img.MakeMyThumbPhoto();

                   }

                   if (this.isDelTempFile && File.Exists(this.SourcePath[i])) File.Delete(this.SourcePath[i]);

               }

               catch (Exception ex)

               {

                   this.Message[i] = "UpLoadFailure:" + ex.Message + "<br>[" + FullFileName + "]";

               }

           }

       }

       /// <summary>

       /// 文件头信息

       /// </summary>

       /// <param name="ImageType">文件类型</param>

       /// <returns></returns>

       public string ImageHeader(string ImageType)

       {

           string fileHeader = "";

           switch (ImageType)

           {

               case "jpeg":

               case "jpg": fileHeader = "image/pjpeg,image/jpeg"; break;

               case "gif": fileHeader = "image/gif"; break;

               case "png": fileHeader = "image/x-png,image/png"; break;

               case "bmp": fileHeader = "image/bmp"; break;

               case "gz": fileHeader = "application/x-gzip"; break;

               case "7z":

               case "rar":

               case "zip": fileHeader = "application/x-compressed,application/octet-stream,application/zip"; break;

               case "xlsx":

               case "xls": fileHeader = "application/vnd.ms-excel"; break;

               case "doc": fileHeader = "application/msword"; break;

               case "rtf": fileHeader = "application/rtf"; break;

               case "pdf": fileHeader = "application/pdf"; break;

               case "ppt": fileHeader = "appication/powerpoint"; break;

               case "tar": fileHeader = "application/x-tar"; break;

               case "swf": fileHeader = "application/x-shockwave-flash"; break;

               case "mpg": fileHeader = "video/mpeg"; break;

               case "mpeg": fileHeader = "audio/mpeg"; break;

               case "wma": fileHeader = "audio/x-ms-wma"; break;

               case "wav": fileHeader = "audio/x-wav"; break;

               case "mid": fileHeader = "audio/x-aiff,audio/midi,audio/x-midi"; break;

               case "avi": fileHeader = "video/x-msvideo"; break;

               case "3pg": fileHeader = "video/3gpp"; break;

               case "mp2":

               case "mp3": fileHeader = "audio/x-mpeg"; break;

               case "flv": fileHeader = "flv-application/octet-stream,video/x-flv"; break;

               case "xml": fileHeader = "text/xml"; break;

               case "txt": fileHeader = "text/plain"; break;

               case "htm":

               case "html": fileHeader = "text/html"; break;

               default: fileHeader = ""; break;

           }

           return fileHeader;

       }

       /// <summary>

       /// 验证文件MIME

       /// </summary>

       /// <param name="fType">当前文件类型</param>

       /// <param name="fMIME">当前文件MIME</param>

       /// <returns></returns>

       public Boolean isMIME(string fType, string fMIME)

       {

           fMIME = "," + fMIME.ToLower() + ",";

           string myMIME = "," + ImageHeader(fType) + ",";

           return myMIME.IndexOf(fMIME) > -1;

       }

       #endregion

   }

}



Copyright © 2010 - 2015 Zhuovi. All Rights Reserved
联系电话:15837199978  E-Mail:service@zhuovi.com  在线QQ:点击这里给我发消息 点击这里给我发消息  备案号:豫ICP备14022191号
郑州网站建设 | 河南网站建设 | 郑州软件 | 河南软件 | 办公软件 | 移动短信 | 注册域名 | 虚拟空间,网站空间 | 群发短信 | 网站优化 | 网站推广 | 优化技术 | 郑州作网站 | 河南作网站
在线咨询 返回顶部