标签:
一、图片上传 :enctype=‘multipart/form-date
首先在进行文件上传时,添加form表单中的enctype属性指定enctype=‘multipart/form-date‘,
文件数据发送给服务端,并不是把文件路径发送给服务端了,它会随机生成一个分割字符串,
把每一个表单元素分割开
<form method=‘post‘ action=‘‘ enctype=‘multipart/form-date‘>
//这里的enctype是提交请求报文的报文体的一种编码格式,
默认的是以键值对然后&符号隔开表单里的每个元素里的内容,
那么这个默认的格式当上传文件的时候是把文件爱你的地址发送到服务端的
<input type=‘file‘ /> //客户端上传域
当模式刚改为enctype=‘multipart/form-date模式的时候服务端接收数据
文本还是一样的接收方式
文件的接收:
HttpPosteFile file=context.Request.File[0];//单个文件的接收获得文件的数据, if(file.ContentLength>0)//判读文件的大小,看下客户端有没有上传文件爱你 { string extions=Path.GetExtension(file.FileName);//获取问津的扩展名 if(extions!=".jpg"&&extions1=“.gif”) { //判断上传文件的格式 } else { string filePath="files"; string fileName=Path.GetFileName(file.FileName);//获取上传文件的文件名 file.SavaAs(context.Server.MapPath(filePath+"/"+fileName));//把文件保存到指定目录下 } } else { //证明客户端没有文件上传,提示一下 }
二、多文件上传
context.Response.ContentType = "text/html"; //允许客户上传的文件的类型 string[] fileType = { ".jpg", ".png", ".gif" }; //接收浏览器上传的文件 HttpFileCollection file = context.Request.Files; //string[] str = {"a","b","c"}; if (file.Count > 0)//判断客户端是否有上传文件 { //循环所有传过来的文件 for (int k = 0; k < file.Count; k++) { int i; //定义一个标记,客户端上传的文件在规定的文件类型里就是 0 不在规定文件类型里就是 2 int num = 0; //循环遍历文件类型数组,判断客户端上传的文件类型是否符合规定的文件类型 for (i = 0; i < fileType.Length; i++) { if (Path.GetExtension(file[k].FileName) == fileType[i]) { num = 2; } } //如果符合,就定义一个标记 if (num == 2) { //为文件改名,避免两个文件上传同名造成覆盖 //用当天时间用作文件夹的名字,进行文件夹的区分 string dirName = DateTime.Now.Year.ToString()+DateTime.Now .Month.ToString () + DateTime.Now.Day.ToString(); //判断文件夹是否存在 if (!Directory.Exists(context.Server.MapPath("files") + "/" + dirName)) { //以当前年月日创建一个文件夹 Directory.CreateDirectory(context.Server.MapPath("files/") + dirName); } //构建文件名年月日时分秒毫秒加10个随机数组成文件的名字 string fileName = DateTime.Now.Year.ToString(); fileName += DateTime.Now.Month.ToString(); fileName += DateTime.Now.Day.ToString(); fileName += DateTime.Now.Hour.ToString(); fileName += DateTime.Now.Minute.ToString(); fileName += DateTime.Now.Second.ToString(); fileName += DateTime.Now.Millisecond.ToString(); Random r = new Random(); for (int j = 0; j < 10; j++) { fileName += r.Next(10); } //拼接好文件的名字 fileName += Path.GetExtension(file[k].FileName); //保存 file[k].SaveAs(context.Server.MapPath("files/" + dirName + "/" + fileName)); } else if (num == 0) { context.Response.Write("<script type=‘text/javascript‘>alert (‘不支持此文件的格式:" + file[k].FileName + "‘);window.location=‘File.htm‘</script>"); context.Response.End(); } } context.Response.Write("<script type=‘text/javascript‘>alert(‘文件上传完成!‘); window.location=‘File.htm‘;</script>"); } else { context.Response.Write("<script type=‘text/javascript‘>alert(‘请选择文件!‘); window.location=‘File.htm‘;</script>"); }
三、想浏览器输出图片,给图片打水印
1)创建画布
//获得原图片地址 string bgImg = context.Server.MapPath("files/1.jpg"); //获得logo图片地址 string lgImg = context.Server.MapPath("files/logo.gif"); //读取原图片 using (Image img=Image.FromFile (bgImg)) { //读取水印图片 using (Image lgimg=Image.FromFile(lgImg )) { //创建一个画布,设置画布尺寸为图片的大小 using (Bitmap map = new Bitmap(img.Width, img.Height)) { //创建一个画笔 using (Graphics g = Graphics.FromImage(map)) { //把图片画到画布上 g.DrawImage(img, new Point(0, 0)); //再把水印图片画上去 g.DrawImage(lgimg, new Rectangle(200,200,lgimg .Width,lgimg.Height), 0,0,lgimg .Width ,lgimg.Height, GraphicsUnit.Pixel,SetImgAttr(50)); //再把字符串画到画布上,由于是先画的图片,所以字符串在图片上面 //g.DrawString ("将老六是个屌",new Font("黑体",50.0f, FontStyle.Bold),Brushes.Pink,new PointF(50,40)); //输出图片 map.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif); } } } } using(Bitmap map=new Bitmap(长,高))//创建一个位图,画布 { using(Graphics g=Graphics.FromImage(map))//为画布创建一个画笔 { g.Clear(Color.White);//给画布填充颜色 g.DrawString("水印文字",new Font("黑体",14.0f,FontStyle.Bold),Brushes.Red,new Pointf(100,100)); //设置水印的样式 参数1:写的内容 参数2:字体样式 参数3:填充字体样式 参数4:水印的位置 g.DrawRectangle(new Pen(Color.blue),new Rectangle(0,0,99,99))//给画布加个边框, 第一个参数是画笔和颜色,第二个参数是边框的形状以及这个框的位置,宽和高 map.Save(context.Response.OutputStream,Sysyem.Drawing.Imaging.ImageForam.JPG); //指定输出的格式,将图片输出到浏览器 } }
2)调整图片透明度
private System.Drawing.Imaging.ImageAttributes SetImgAttr(float flo) { //创建一个二维数组,5x5的RGBA矩阵,图片是有三原色、透明度组成的, RGBA就是:红、绿、蓝、透明度 float[][] fl ={//前面三个是颜色,第四个是透明度 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,1,0}, new float[]{0,0,0,0,1}, }; //定义图片的信息 ColorMatrix matrix = new ColorMatrix(fl); //创建一个ImageAttributes System.Drawing.Imaging.ImageAttributes imgAttr = new System.Drawing.Imaging.ImageAttributes(); //用我们自己定义的RGBA矩阵打破原有的图像矩阵信息. imgAttr.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); return imgAttr; }
标签:
原文地址:http://www.cnblogs.com/hetong/p/4796184.html