c#多图片上传并生成缩略图的实例代码
2013-04-15 00:00
941 查看
前台代码:
前台就是几个控件和一个ValidImage方法。
后台代码:
代码有很多需要改进的地方,希望大家多多指点。
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="upload.aspx.cs" Inherits="upload" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <style type="text/css"> li { list-style: none; padding-top: 10px; } </style> <script type="text/javascript" src="js/jquery-1.6.2.min.js"></script> <script type="text/javascript"> function ValidImage(id, msg) { $(id).parent().append("<span>" + msg + "</span>"); return false; } </script> </head> <body> <form id="form1" runat="server" enctype="multipart/form-data" method="post"> <div> <ul> <li> <input type="file" id="upload1" name="upload" /> </li> <li> <input type="file" id="upload2" name="upload" /> </li> <li> <input type="file" id="upload3" name="upload" /> </li> <li> <input type="file" id="upload4" name="upload" /></li> <li> <input type="file" id="upload5" name="upload" /> </li> <li> <input type="submit" id="btnPostFile" runat="server" onserverclick="btnPostFile_ServerClick" value="开始上传" /> </li> </ul> </div> </form> </body> </html>
前台就是几个控件和一个ValidImage方法。
后台代码:
protected void btnPostFile_ServerClick(object sender, EventArgs e) { string filePath = Server.MapPath("/uploadImg"); const int size = 5242880; if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } if (Request.Files.Count > 0) { for (int i = 0; i < Request.Files.Count; i++) { HttpPostedFile postFile = Request.Files[i]; string uploadFileID = string.Format("#upload{0}", i + 1); //当前的上传控件ID,因为jquery要调用就加了# string msg = null; //提示信息 if (postFile.FileName.Trim().Length <= 0) { continue; } if (postFile.ContentLength > size) { msg = "文件太大"; Page.ClientScript.RegisterStartupScript(GetType(), "", "ValidImage(" + uploadFileID + "," + msg + ")", true);//将提示信息发送到客户端 continue; } string savePath = Path.Combine(filePath, postFile.FileName); //图片的保存地址 if (!File.Exists(savePath)) { postFile.SaveAs(Path.Combine(filePath, postFile.FileName)); //如果文件不存在就保存 } else { msg = "文件" + postFile.FileName + "已经存在"; Page.ClientScript.RegisterStartupScript(GetType(), "", "ValidImage(" + uploadFileID + "," + msg + ")", true);//将提示信息发送到客户端 continue; } if (IsImg(savePath)) //通过IsImg方法验证文件是否是图片,或者格式是否正确 { SmallImg(postFile.InputStream, postFile.FileName); } else { msg = "只能上传JGP、PNG类型的图片,请检查文件格式是否正确"; Page.ClientScript.RegisterStartupScript(GetType(), "", "ValidImage(" + uploadFileID + "," + msg + ")", true);//将提示信息发送到客户端 File.Delete(savePath); //如果不是图片就删除 } } } }
#region 验证上传文件的格式 /// <summary> /// 验证上传文件是否是图片 /// </summary> /// <param name="FilePath">文件的保存路径</param> /// <returns></returns> private bool IsImg(string FilePath) { using (FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read)) { bool result = false; BinaryReader br = new BinaryReader(fs, System.Text.Encoding.UTF8); string strImg = ""; byte buffer; try { buffer = br.ReadByte(); strImg = buffer.ToString(); buffer = br.ReadByte(); strImg += buffer.ToString(); } catch { fs.Close(); br.Close(); } if (strImg == "255216" || strImg == "13780")//说明255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar { result = true; } return result; } } #endregion
#region 将图片生成缩略图 /// <summary> /// 生成缩略图 /// </summary> private void SmallImg(Stream oStream, string FileName) { using (System.Drawing.Image img = System.Drawing.Image.FromStream(oStream)) { int newWidth = 100; int newHeight = 80; int oldWidth = img.Width; int oldHeight = img.Height; if (oldWidth > oldHeight) { newHeight = (int)Math.Floor((double)oldHeight * (double)newWidth / (double)oldWidth); } else { newWidth = (int)Math.Floor((double)oldWidth * (double)newHeight / (double)oldHeight); } using (Bitmap bmp = new Bitmap(newWidth, newHeight)) { using (Graphics g = Graphics.FromImage(bmp)) { g.Clear(Color.Transparent); g.InterpolationMode = InterpolationMode.High; g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.DrawImage(img, new Rectangle(0, 0, newWidth, newHeight), new Rectangle(0, 0, oldWidth, oldHeight), GraphicsUnit.Pixel); string newFileName = Path.GetFileNameWithoutExtension(FileName) + "_small" + Path.GetExtension(FileName); //缩略图名称 string filePath = Server.MapPath("/uploadImg/") + newFileName; bmp.Save(filePath); } } } } #endregion
代码有很多需要改进的地方,希望大家多多指点。
相关文章推荐
- c#多图片上传并生成缩略图的实例代码
- asp.net(c#)上传图片并生成缩略图的代码
- ThinkPHP5.0 图片上传生成缩略图实例代码说明
- 在ASP.NET中上传图片并生成缩略图的C#代码
- 在ASP.NET中上传图片并生成缩略图的C#源码
- asp.net上传图片并作处理水印与缩略图的实例代码
- ASP.NET C#(4.0) + SQL2008 R2 多图片上传并生成缩略图一并保存至数据库
- C#生成图片缩略图、水印及上传的几个通用方法
- C#上传图片和生成缩略图以及图片预览
- [网络收集]Asp.net上传图片同时生成缩略图和水印图后台代码
- 在ASP.NET中上传图片并生成缩略图的C#源码
- 上传图片 并生成缩略图的 例子 C#.net
- 在ASP.NET中上传图片并生成缩略图的C#源码
- 在ASP.NET中上传图片并生成缩略图的C#源码
- [网络收集]使用ASP.net(C#)批量上传图片并自动生成缩略图,文字水印图,图片水印图
- C#中上传图片并生成缩略图
- ASP.NET(C#)图片上传压缩成缩略图的代码
- [原创]超强C#图片上传,加水印,自动生成缩略图源代码
- JSP图片上传并生成缩略图实例详解
- C#的图片处理类,生成高质量缩略图,代码已测试过,效果很好