c#多图片上传并生成缩略图的实例代码

  前台代码:

  

复制代码 代码如下:

  <%@ 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

  代码有很多需要改进的地方,希望大家多多指点。