前台页面显示:
一般出来程序之图片文件上传及加水印
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <meta charset="utf-8" /> </head> <body> <form method="post" action="ProcessFileUp.ashx" enctype="multipart/form-data"> <input type="file" name="fileUp" /> <input type="submit" value="上传" /> </form> </body> </html>
一般处理程序代码:
1 using System; 2 using System.Collections.Generic; 3 using System.Drawing; 4 using System.IO; 5 using System.Linq; 6 using System.Web; 7 8 namespace JMH.StudyProject.WebApp._2018_3_27 9 { 10 /// <summary> 11 /// ProcessFileUp 的摘要说明 12 /// </summary> 13 public class ProcessFileUp : IHttpHandler 14 { 15 16 public void ProcessRequest(HttpContext context) 17 { 18 context.Response.ContentType = "text/html"; 19 HttpPostedFile file = context.Request.Files[0];//获取上次单个文件 20 //HttpFileCollection fileCollection = context.Request.Files;/获取上次多个文件 21 if (file.ContentLength>0) 22 { 23 //对上传文件类型进行校验 24 string fileName = Path.GetFileName(file.FileName);//获取上传文件的名称包含扩展名 25 string fileExt = Path.GetExtension(fileName);//获取上传文件扩展名 26 List<string> fileExtList = new List<string>() { 27 ".jpg", 28 ".jpeg", 29 ".gif", 30 ".png" 31 }; 32 if (fileExtList.Contains(fileExt)) 33 { 34 //1.对上传文件进行重命名(文件流的md5或者guid) 35 string newfileName = Guid.NewGuid().ToString(); 36 //2.将上传的文件放在不同的目录下面 37 string dir = "/ImageUpload/" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "/"; 38 if (!Directory.Exists(context.Request.MapPath(dir))) 39 { 40 Directory.CreateDirectory(context.Request.MapPath(dir)); 41 } 42 43 string fullDir = dir + newfileName + fileExt;//文件存放的完整路径 44 //保存上传图片 45 file.SaveAs(context.Request.MapPath(fullDir)); 46 47 //file.SaveAs(context.Request.MapPath("/ImageUpload/" + fileName));//完成文件的保存 48 49 //创建图片的水印 50 // using (Image img=Image.FromStream(file.InputStream)) 51 //根据上传成功的图片创建一个Image 52 using (Image img = Image.FromFile(context.Request.MapPath(fullDir))) 53 { 54 using (Bitmap map = new Bitmap(img.Width,img.Height))//根据上传图片的高度和宽度创建画布 55 { 56 //为画布创建画笔 57 using (Graphics g = Graphics.FromImage(map)) 58 { 59 //用画笔在画布上画图,从画布的左上角开始,将图片画到画布 60 g.DrawImage(img,0,0,img.Width,img.Height); 61 g.DrawString("水印图片",new Font("黑体",14.0f,FontStyle.Bold),Brushes.Red,new PointF(map.Width-80,map.Height-25)); 62 //在同一目录下保存上传图片的水印图片 63 string waterImageName = dir + newfileName + "_water"; 64 map.Save(context.Request.MapPath(waterImageName + ".jpg"),System.Drawing.Imaging.ImageFormat.Jpeg); 65 66 context.Response.Write("<html><body><img src=\'"+ waterImageName + ".jpg\'/></body></html>"); 67 } 68 } 69 } 70 71 } 72 else 73 { 74 context.Response.Write("只能上传图片文件"); 75 } 76 } 77 else { 78 context.Response.Write("请选择上传文件"); 79 } 80 81 } 82 83 public bool IsReusable 84 { 85 get 86 { 87 return false; 88 } 89 } 90 } 91 }