//根据文件扩展名设置要上传到哪个目录
        private static string SetDefaultDir(string strFileExt, ModelUploadFileConfig objConfig)
        {
            string strReturn = "";

            switch (strFileExt)
            {
            case "gif":
            case "jpg":
            case "jpeg":
            case "bmp":
            case "png":
            case "tiff":
            case "wmf":
            case "ico":
                strReturn = objConfig.UploadFileRootDir + "/image/";
                break;

            case "swf":
                strReturn = objConfig.UploadFileRootDir + "/flash/";
                break;

            case "xls":
            case "xlsx":
                strReturn = objConfig.UploadFileRootDir + "/excel/";
                break;

            case "txt":
            case "doc":
            case "docx":
            case "chm":
            case "pdf":
                strReturn = objConfig.UploadFileRootDir + "/document/";
                break;

            case "zip":
            case "rar":
                strReturn = objConfig.UploadFileRootDir + "/zip/";
                break;

            case "avi":
            case "mp3":
            case "mp4":
            case "wma":
            case "wav":
            case "flv":
                strReturn = objConfig.UploadFileRootDir + "/media/";
                break;

            default:
                strReturn = objConfig.UploadFileRootDir + "/document/";
                break;
            }
            return(strReturn);
        }
 //检查上传的图像文件扩展名
 private static bool CheckImageFileExt(string strFileExt, ModelUploadFileConfig objConfig)
 {
     string[] aryAllowFileExt = objConfig.AllowUploadImageFileExt.Split(',');
     for (int i = 0; i <= aryAllowFileExt.Length - 1; i++)
     {
         if (strFileExt == aryAllowFileExt[i])
         {
             return(true);
         }
     }
     return(false);
 }
        //绘制文本水印
        private static void DrawTxtWaterMark(ModelUploadFileConfig objConfig)
        {
            if (!File.Exists(objConfig.ServerFileFullPath))
            {
                objConfig.OPFlag    = false;
                objConfig.OPMessage = "文件不存在,加水印失败。";
                return;
            }
            Image objImg = Image.FromFile(objConfig.ServerFileFullPath);

            switch (objImg.PixelFormat)
            {
            case PixelFormat.Format1bppIndexed:
            case PixelFormat.Format4bppIndexed:
            case PixelFormat.Format8bppIndexed:
            case PixelFormat.Undefined:
            case PixelFormat.Format16bppArgb1555:
            case PixelFormat.Format16bppGrayScale:
                objConfig.OPFlag    = false;
                objConfig.OPMessage = "上传的图片包含不正确的像素格式,不能加水印!";
                objImg.Dispose();
                return;

            default:
                break;
            }
            Graphics g = null;
            Font     f = new Font("Verdana", 12f, FontStyle.Bold);
            Brush    b = new SolidBrush(Color.Red);

            try
            {
                g = Graphics.FromImage(objImg);
                g.DrawImage(objImg, 0, 0, objImg.Width, objImg.Height);
                g.DrawString(objConfig.WaterMarkTxtString, f, b, Convert.ToSingle(objConfig.WaterMarkMarginRight), Convert.ToSingle(objConfig.WaterMarkMarginBottom));
                objConfig.ServerFileHasWMFullPath = RenameFile(objConfig.ServerFileFullPath);
                objImg.Save(objConfig.ServerFileHasWMFullPath);
                objConfig.OPFlag = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                f.Dispose();
                b.Dispose();
                g.Dispose();
                objImg.Dispose();
                HelperFile.DeleteFile(objConfig.ServerFileHasWMFullPath);
            }
        }
        //设置上传文件的大小限制
        private static int SetDefaultSize(string strFileExt, ModelUploadFileConfig objConfig)
        {
            int intReturn = 0;

            switch (strFileExt)
            {
            case "gif":
            case "jpg":
            case "jpeg":
            case "bmp":
            case "png":
            case "tiff":
            case "wmf":
            case "ico":
                intReturn = objConfig.AllowUploadImageFileSize;
                break;

            case "swf":
                intReturn = objConfig.AllowUploadSwfFileSize;
                break;

            case "txt":
            case "doc":
            case "docx":
            case "xls":
            case "xlsx":
            case "chm":
            case "pdf":
                intReturn = objConfig.AllowUploadTxtFileSize;
                break;

            case "zip":
            case "rar":
                intReturn = objConfig.AllowUploadZipFileSize;
                break;

            case "avi":
            case "flv":
            case "mp3":
            case "mp4":
            case "wma":
            case "wav":
                intReturn = objConfig.AllowUploadMediaFileSize;
                break;

            default:
                intReturn = 10;
                break;
            }
            return(intReturn);
        }
        //生成缩略图
        private static ModelUploadFileConfig SetThumbImage(ModelUploadFileConfig objConfig)
        {
            if (!File.Exists(objConfig.ServerFileFullPath))
            {
                objConfig.OPFlag    = false;
                objConfig.OPMessage = "文件不存在,生成缩略图失败。";
                return(objConfig);
            }
            Image.GetThumbnailImageAbort objCallb = null;
            Image objImg      = null;
            Image objImgThumb = null;

            try
            {
                objImg      = Image.FromFile(objConfig.ServerFileFullPath);
                objImgThumb = objImg.GetThumbnailImage(objConfig.ThumbImageWidth, objConfig.ThumbImageHeight, objCallb, new IntPtr());
                string strFileExt  = objConfig.ServerFileFullPath.Substring(objConfig.ServerFileFullPath.LastIndexOf(".") + 1);
                string strFileName = objConfig.ServerFileFullPath.Substring(0, objConfig.ServerFileFullPath.LastIndexOf("."));
                objConfig.Thumb1FilePath = strFileName + "tn." + strFileExt;
                objImgThumb.Save(objConfig.Thumb1FilePath);
                objConfig.OPFlag    = true;
                objConfig.OPMessage = "生成缩略图成功!";
                return(objConfig);
            }
            catch (Exception ex)
            {
                objConfig.OPFlag    = false;
                objConfig.OPMessage = ex.Message;
                return(objConfig);
            }
            finally
            {
                objImg.Dispose();
                objImgThumb.Dispose();
            }
        }
        private void UploadFile(HttpContext context)
        {
            // HttpPostedFile objHPF = context.Request.Files[0];
            HttpPostedFile objHPF = context.Request.Files["photo_file"];

            if (objHPF == null)
            {
                context.Response.Write(HelperUtility.setReturnJson("500", "要上传的文件为空!", ""));
                return;
            }
            ModelUploadFileConfig objConfig = new ModelUploadFileConfig();

            objConfig.AllowUploadFileExt      = "jpg,jpeg,png";
            objConfig.AllowUploadImageFileExt = "jpg,jpeg,png";
            HelperUploadFile.SaveULFileFromHPF(objHPF, objConfig);
            if (objConfig.OPFlag)
            {
                context.Response.Write(HelperUtility.setReturnJson("200", "", objConfig.ServerFilePath));
            }
            else
            {
                context.Response.Write(HelperUtility.setReturnJson("500", objConfig.OPMessage, ""));
            }
        }
        //绘制图片水印
        private static void DrawPicWaterMark(ModelUploadFileConfig objConfig)
        {
            if (!File.Exists(objConfig.ServerFileFullPath))
            {
                objConfig.OPFlag    = false;
                objConfig.OPMessage = "图片文件不存在,加水印失败。";
                return;
            }
            string strRootPath = System.Web.HttpContext.Current.Request.PhysicalApplicationPath;

            objConfig.WaterMarkImagePath = strRootPath + objConfig.WaterMarkImagePath;
            if (!File.Exists(objConfig.WaterMarkImagePath))
            {
                objConfig.OPFlag    = false;
                objConfig.OPMessage = "水印图片文件不存在,加水印失败。";
                return;
            }
            //将服务器端要加水印的图像文件载入到Image对象里
            Image objImg = Image.FromFile(objConfig.ServerFileFullPath);

            switch (objImg.PixelFormat)
            {
            case PixelFormat.Format1bppIndexed:
            case PixelFormat.Format4bppIndexed:
            case PixelFormat.Format8bppIndexed:
            case PixelFormat.Undefined:
            case PixelFormat.Format16bppArgb1555:
            case PixelFormat.Format16bppGrayScale:
                objConfig.OPFlag    = false;
                objConfig.OPMessage = "上传的图片包含不正确的像素格式,不能加水印。";
                objImg.Dispose();
                return;
            }
            //将水印图像文件载入到另一个Image对象里
            Image objWMImg = Image.FromFile(objConfig.WaterMarkImagePath);
            // 将保存了图像文件的Image对象存到一个Graphics对象里
            Graphics        g       = Graphics.FromImage(objImg);
            MemoryStream    objMS   = new MemoryStream();
            ImageAttributes imgAttr = new ImageAttributes();
            FileStream      objFS   = null;

            try
            {
                //获取要绘制图形坐标
                int x = objImg.Width - objConfig.WaterMarkMarginRight;
                int y = objImg.Height - objConfig.WaterMarkMarginBottom;
                //设置颜色矩阵
                float[][] matrixItems =
                {
                    new float[] {
                        1,
                        0,
                        0,
                        0,
                        0
                    },
                    new float[] {
                        0,
                        1,
                        0,
                        0,
                        0
                    },
                    new float[] {
                        0,
                        0,
                        1,
                        0,
                        0
                    },
                    new float[] {
                        0,
                        0,
                        0,
                        Convert.ToSingle(objConfig.WaterMarkTransparent) / 100f,
                        0
                    },
                    new float[] {
                        0,
                        0,
                        0,
                        0,
                        1
                    }
                };
                ColorMatrix colorMatrix = new ColorMatrix(matrixItems);
                imgAttr.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
                g.SmoothingMode = SmoothingMode.AntiAlias;
                //在Graphics对象里绘制水印图像,此时,和这个Graphics对象相关联的服务器文件也跟着被画上了水印
                g.DrawImage(objWMImg, new Rectangle(x, y, objWMImg.Width, objWMImg.Height), 0, 0, objWMImg.Width, objWMImg.Height, GraphicsUnit.Pixel, imgAttr);
                //读取原来服务器端要写入水印的文件的文件类型
                FileInfo    objFile   = new FileInfo(objConfig.ServerFileFullPath);
                ImageFormat imageType = default(ImageFormat);
                switch (objFile.Extension.ToLower())
                {
                case ".jpg":
                    imageType = ImageFormat.Jpeg;
                    break;

                case ".jpeg":
                    imageType = ImageFormat.Jpeg;
                    break;

                case ".gif":
                    imageType = ImageFormat.Gif;
                    break;

                case ".png":
                    imageType = ImageFormat.Png;
                    break;

                case ".bmp":
                    imageType = ImageFormat.Bmp;
                    break;

                case ".tif":
                    imageType = ImageFormat.Tiff;
                    break;

                case ".wmf":
                    imageType = ImageFormat.Wmf;
                    break;

                case ".ico":
                    imageType = ImageFormat.Icon;
                    break;

                default:
                    imageType = ImageFormat.Jpeg;
                    break;
                }
                // 将已经画好水印的Image对象保存到内存流中
                objImg.Save(objMS, imageType);
                // 将内存流以数组形式保存到图像数组里
                byte[] imgData = objMS.ToArray();
                //将写了水印的图像数组存入改了名的文件
                objFS = new FileStream(RenameFile(objConfig.ServerFileFullPath), FileMode.Create, FileAccess.Write);
                if ((objFS != null))
                {
                    objFS.Write(imgData, 0, imgData.Length);
                }
                objConfig.OPFlag = true;
                objConfig.ServerFileHasWMFullPath = RenameFile(objConfig.ServerFileFullPath);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                objFS.Close();
                objFS.Dispose();
                objFS = null;
                objImg.Dispose();
                objImg = null;
                objWMImg.Dispose();
                objWMImg = null;
                g.Dispose();
                g = null;
                objMS.Close();
                objMS.Dispose();
                objMS = null;
                imgAttr.Dispose();
                imgAttr = null;
                HelperFile.DeleteFile(objConfig.ServerFileHasWMFullPath);
            }
        }
        // 用.net的FileUpload控件上传单个文件
        public static ModelUploadFileConfig SaveULFileFromControl(System.Web.UI.WebControls.FileUpload objFU,
                                                                  ModelUploadFileConfig objConfig)
        {
            if (!objFU.HasFile)
            {
                objConfig.OPFlag    = false;
                objConfig.OPMessage = "指定文件不存在";
                return(objConfig);
            }
            string strULFileName = objFU.PostedFile.FileName;
            string strULFileType = strULFileName.Substring(strULFileName.LastIndexOf(".") + 1).ToLower();

            if (!CheckFileExt(strULFileType, objConfig))
            {
                objConfig.OPFlag    = false;
                objConfig.OPMessage = "上传文件的格式不正确";
                return(objConfig);
            }
            int intAllowSize = SetDefaultSize(strULFileType, objConfig);

            if (Math.Round(Convert.ToDouble(objFU.PostedFile.ContentLength / 1024), 2) > intAllowSize)
            {
                objConfig.OPFlag    = false;
                objConfig.OPMessage = "系统允许您上传的文件类型的大小不能超过" + intAllowSize + "k";
                return(objConfig);
            }
            if (objConfig.ThumbFlag)
            {
                if (!CheckImageFileExt(strULFileType, objConfig))
                {
                    objConfig.OPFlag    = false;
                    objConfig.OPMessage = "不是图像文件,不能生成缩略图";
                    return(objConfig);
                }
            }
            if (objConfig.WaterMarkImageFlag)
            {
                if (!CheckImageFileExt(strULFileType, objConfig))
                {
                    objConfig.OPFlag    = false;
                    objConfig.OPMessage = "不是图像文件,不能生成水印";
                    return(objConfig);
                }
            }
            //开始保存文件
            string strRootPath       = HttpContext.Current.Request.PhysicalApplicationPath;
            string strServerFilePath = CreateDateDir(SetDefaultDir(strULFileType, objConfig)) +
                                       SetRnd14FileName() +
                                       "." + strULFileType;
            string strServerFileFullPath = strRootPath + strServerFilePath;

            try
            {
                objFU.PostedFile.SaveAs(strServerFileFullPath);
            }
            catch (Exception ex)
            {
                objConfig.OPFlag    = false;
                objConfig.OPMessage = ex.Message;
                return(objConfig);
            }
            //文件成功保存到服务器端
            objConfig.OPFlag             = true;
            objConfig.ServerFilePath     = strServerFilePath;
            objConfig.ServerFileFullPath = strServerFileFullPath;
            //如果是图片文件,可能有生成缩略图操作,或者加文字或图片水印操作
            if (CheckImageFileExt(strULFileType, objConfig))
            {
                // 生成缩略图
                if (objConfig.ThumbFlag)
                {
                    SetThumbImage(objConfig);
                }
                // 加水印
                if (objConfig.WaterMarkTxtFlag)
                {
                    DrawTxtWaterMark(objConfig);
                }
                else if (objConfig.WaterMarkImageFlag)
                {
                    DrawPicWaterMark(objConfig);
                }
            }
            if (objConfig.OPFlag)
            {
                objConfig.OPMessage = "上传成功";
            }
            return(objConfig);
        }