//根据文件扩展名设置要上传到哪个目录 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); }