ASP.NET利用JQuery自动上传图片

记得去年的时候,我在做上传图片是就遇到了一个问题,当时还在博客园的博问中提问过(http://q.cnblogs.com/q/28119/),最终我选择了使用Uploadify解决当时的问题。前几天在做上传图片时,想选择图片之后立即上传,自然而然想到了使用JQuery,但是又遇到了去年遇到的那个问题,这种情况还是需要提交表单才行。前天看到园子的一位朋友写的ASP.NET工作笔记之一:图片上传预览及无刷新上传,今天我也专门写了一个例子,欢迎批评指正。

DEMO的结构

image

下面看看UploadImage.aspx页面里的代码:

HTML代码:

   1:  <form id="form1" runat="server">
   2:     <div id="upload">
   3:         <input type="file" id="uploadImage" name="uploadImage" />
   4:     </div>
   5:     <div id="preview">
   6:         <img id="previewImage" src="images/nopic.jpg" alt="暂无图片" />
   7:     </div>
   8:  </form>

CSS代码:

   1:          #upload
   2:          {
   3:              height: 25px;
   4:          }
   5:          #upload input
   6:          {
   7:              float: left;
   8:              margin: 0 20px 0 0;
   9:          }
  10:          #upload img
  11:          {
  12:              width: 25px;
  13:              height: 25px;
  14:              float: left;
  15:          }
  16:          #preview
  17:          {
  18:              width: 300px;
  19:              margin: 10px 0 0 0;
  20:          }
  21:          #preview img
  22:          {
  23:              width: 300px;
  24:              height: 260px;
  25:          }

JS代码:

首先引用下面的JS文件:

   1:  <script src="js/jquery-1.7.2.min.js" type="text/javascript"></script>
   2:  <script src="js/jquery.form.js" type="text/javascript"></script>

 

   1:     $(function () {
   2:              var wait = $("<img src=\"images/wait.gif\" alt=\"正在上传\"/>");
   3:              $("#uploadImage").change(function () {
   4:                  $("#form1").ajaxSubmit({
   5:                      url: 'UploadImage.ashx',
   6:                      beforeSubmit: function () {
   7:                          $("#upload").append(wait);
   8:                          $("#upload img").css("display", "inline");
   9:                      },
  10:                      success: function (data) {
  11:                          $("#upload img").fadeOut(2000);
  12:                          if (data != "上传失败") {
  13:                              $("#previewImage").attr("src", "uploadimages/" + data).hide().fadeIn(2000);
  14:                          }
  15:                          else {
  16:                              alert("上传失败");
  17:                          }
  18:                      }
  19:                  });
  20:              });
  21:          });

UploadImage.ashx文件的代码如下:

   1:  public void ProcessRequest(HttpContext context)
   2:  {
   3:      context.Response.ContentType = "text/plain";
   4:      HttpPostedFile file = context.Request.Files[0];
   5:      if (file != null)
   6:      {
   7:          try
   8:          {
   9:              //图片保存的文件夹路径
  10:              string path = context.Server.MapPath("~/uploadimages/");
  11:              //每天上传的图片一个文件夹
  12:              string folder = DateTime.Now.ToString("yyyyMMdd");
  13:              //如果文件夹不存在,则创建
  14:              if (!Directory.Exists(path + folder))
  15:              {
  16:                  Directory.CreateDirectory(path + folder);
  17:              }
  18:              //上传图片的扩展名
  19:              string type = file.FileName.Substring(file.FileName.LastIndexOf('.'));
  20:              //保存图片的文件名
  21:              string saveName = Guid.NewGuid().ToString() + type;
  22:              //保存图片
  23:              file.SaveAs(path + folder + "/" + saveName);
  24:              context.Response.Write(folder + "/" + saveName);
  25:          }
  26:          catch
  27:          {
  28:              context.Response.Write("上传失败");
  29:          }
  30:      }
  31:  }

最后程序运行的效果如下图所示:

未上传图片

QQ截图20120429110002

上传后

QQ截图20120429111407

以上代码我在谷歌和FF中测试没有问题,在IE9下会出现下面的问题:

QQ截图20120429111633

查看问题出现在哪,启动IE9的开发人员工具进行调试,通过调试可以发现IE9在返回的data前后分别加了<pre>和</pre>

QQ截图20120429111905

这样的话,就需要修改一下JS代码,如果是IE9的话,就将<pre></pre>替换掉。

   1:  success: function (data) {
   2:      $("#upload img").fadeOut(2000);
   3:      if (data != "上传失败") {
   4:          if ($.browser.msie) {
   5:              data = data.replace("<pre>", "").replace("</pre>", "");
   6:          }
   7:          $("#previewImage").attr("src", "uploadimages/" + data).hide().fadeIn(2000);
   8:      }
   9:      else {
  10:          alert("上传失败");
  11:      }
  12:  }

上面的代码只在IE9下测试,其他版本的,感兴趣的朋友可以自己测试。

在线测试地址:http://www.tnmblogs.com/Demo/UploadImage.aspx

posted @ 2012-04-29 12:33  BobTian  阅读(15172)  评论(11编辑  收藏  举报