前台代码:
复制代码 代码如下:
<%@ 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
代码有很多需要改进的地方,希望大家多多指点。 |