public class cl_file_upload : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; context.Response.Charset = "UTF-8"; UploadFileResult result = new UploadFileResult(); string savePath = "/attem"; string dirPath = context.Server.MapPath(savePath); HttpPostedFile PostedFile = context.Request.Files[0]; // 读取原始文件名 string LocalName = PostedFile.FileName; // 初始化byte长度. byte[] File = new Byte[PostedFile.ContentLength]; // 转换为byte类型 System.IO.Stream stream = PostedFile.InputStream; string filename, error; if (CheckFile(File, "jpg,jpeg,gif,png,doc,docx,xls,xlsx,ppt,pptx,pdf", LocalName, 4097152, "1", out error, out filename)) { string path = dirPath + @"\" + filename; context.Request.Files[0].SaveAs(path); result.result = 1; result.url = savePath + "/" + filename; result.localname = jsonString(LocalName); } else { result.result = 0; result.error = error; } context.Response.Write(JsonHelp.ObjToJsonStr(result)); } string jsonString(string str) { str = str.Replace("\\", "\\\\"); str = str.Replace("/", "\\/"); str = str.Replace("‘", "\\‘"); return str; } string GetFileExt(string FullPath) { if (FullPath != "") return FullPath.Substring(FullPath.LastIndexOf(‘.‘) + 1).ToLower(); else return ""; } void CreateFolder(string FolderPath) { if (!System.IO.Directory.Exists(FolderPath)) System.IO.Directory.CreateDirectory(FolderPath); } /// <summary> /// 检测上传文件的有效性 /// </summary> /// <param name="file">文件</param> /// <param name="file_ext">允许上传的扩展名</param> /// <param name="localname">本地文件名称,带扩展名</param> /// <param name="max_size">允许上传文件最大大小</param> /// <param name="error">错误信息</param> /// <param name="filename">最终生成的文件名</param> /// <returns></returns> bool CheckFile(byte[] file, string file_ext, string localname, int max_size, string CreateFileNameType, out string error, out string filename) { error = ""; filename = ""; if (file.Length == 0) { error = "无数据提交"; return false; } if (file.Length > max_size) { error = "文件大小超过" + max_size + "字节"; return false; } // 取上载文件后缀名 string extension = GetFileExt(localname); if (("," + file_ext + ",").IndexOf("," + extension + ",") < 0) { error = "上传文件扩展名必需为:" + file_ext; return false; } if (CreateFileNameType == "1") { Random random = new Random(DateTime.Now.Millisecond); filename = DateTime.Now.ToString("yyyyMMddhhmmss") + random.Next(10000) + "." + extension; } else { filename = localname; } return true; } /// <summary> /// /// </summary> /// <param name="create_originalImageName">是否保存原图</param> /// <param name="originalImage">原图</param> /// <param name="imageServerRootDirectory">保存根目录</param> /// <param name="imageSubDirectory">图片目录</param> /// <param name="originalImageName">原图新名称</param> /// <param name="thumbnailName_small">缩略小图名称</param> /// <param name="maxSize_small">缩略小图最大尺寸</param> /// <param name="thumbnailName_big">缩略小图名称</param> /// <param name="maxSize_big">缩略大图最大尺寸</param> /// <returns></returns> protected bool Make_thumbnail_Image_big_small(bool create_originalImageName, System.Drawing.Image originalImage, string imageServerRootDirectory, string imageSubDirectory, string originalImageName, string thumbnailName_small, int maxSize_small, string thumbnailName_big, int maxSize_big) { string thumbnailPath = imageServerRootDirectory + "\\" + imageSubDirectory + "\\" + thumbnailName_big; string originalImagePath = imageServerRootDirectory + "\\" + imageSubDirectory + "\\" + originalImageName; int x = 0; int y = 0; int ow = originalImage.Width; int oh = originalImage.Height; int towidth = 0; int toheight = 0; if (ow < maxSize_big && oh < maxSize_big) { towidth = ow; toheight = oh; } else { #region 计算比例 if (ow > oh) // 宽 比 高 大 { decimal YuanShiBiLi = (decimal)oh / (decimal)ow; towidth = (ow > maxSize_big) ? maxSize_big : ow; toheight = (int)(YuanShiBiLi * towidth); } else { decimal BiLi = (decimal)ow / (decimal)oh; toheight = (oh > maxSize_big) ? maxSize_big : oh; towidth = (int)(toheight * BiLi); } #endregion } #region 大图 //新建一个bmp图片 System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight); //新建一个画板 System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap); //设置高质量插值法 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; //设置高质量,低速度呈现平滑程度 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; //清空画布并以透明背景色填充 g.Clear(System.Drawing.Color.Transparent); g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight),//在指定位置并且按指定大小绘制原图片的指定部分 new System.Drawing.Rectangle(x, y, ow, oh), System.Drawing.GraphicsUnit.Pixel); try { bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg); //以jpg格式保存缩略图 } catch (System.Exception e) { throw e; } #endregion if (thumbnailName_small.Length > 2) { #region small 小图 { int x_small = 0; int y_small = 0; int ow_small = towidth; int oh_small = toheight; int towidth_small = 0; int toheight_small = 0; if (ow_small > oh_small) { decimal bili_small = (decimal)oh_small / (decimal)ow_small; towidth_small = (ow_small > maxSize_small) ? maxSize_small : ow_small; toheight_small = (int)(bili_small * towidth_small); } else { decimal bili_small = (decimal)ow_small / (decimal)oh_small; toheight_small = (oh_small > maxSize_small) ? maxSize_small : oh_small; towidth_small = (int)(bili_small * toheight_small); } //新建一个bmp图片 System.Drawing.Image bitmap_small = new System.Drawing.Bitmap(towidth_small, toheight_small); //新建一个画板 System.Drawing.Graphics g_small = System.Drawing.Graphics.FromImage(bitmap_small); //设置高质量插值法 g_small.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; //设置高质量,低速度呈现平滑程度 g_small.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; //清空画布并以透明背景色填充 g_small.Clear(System.Drawing.Color.Transparent); System.Drawing.Image originalImage_small = bitmap; g_small.DrawImage(originalImage_small, new System.Drawing.Rectangle(0, 0, towidth_small, toheight_small),//在指定位置并且按指定大小绘制原图片的指定部分 new System.Drawing.Rectangle(x_small, y_small, ow_small, oh_small), System.Drawing.GraphicsUnit.Pixel); string thumbnailPath_small = imageServerRootDirectory + "\\" + imageSubDirectory + "\\" + thumbnailName_small; try { bitmap_small.Save(thumbnailPath_small, System.Drawing.Imaging.ImageFormat.Jpeg); //以jpg格式保存缩略图 } catch (System.Exception e) { throw e; } finally { originalImage_small.Dispose(); bitmap_small.Dispose(); g_small.Dispose(); } } #endregion } if (create_originalImageName == true) { originalImage.Save(originalImagePath, System.Drawing.Imaging.ImageFormat.Jpeg); } try { originalImage.Dispose(); bitmap.Dispose(); g.Dispose(); } catch (Exception ex) { } return true; } public bool IsReusable { get { return false; } } }
时间: 2024-10-11 16:41:57