Javascript与asp.net 实现Ajax多文件无刷新上传

【转自】    http://www.chenjiliang.com/Article/View.aspx?ArticleID=2802

 

这几天在等着上班,闲来无事,就写了一个无刷新的上传功能,这个上传只是实现局部刷新,我已经把方法都整理好,可以随意添加多个上传控件,只要调用一个方法就可以了,为了便于阅读我没有把JS独立出来,以后真正用到项目上的时候再提出来,我在每个方法上面都写了注视,具体可以看代码部分,现在一直在用JQuery,它提供的方法太好用的,剩了很多事。

此方法主要是通过iFrame调用上传页的控件来实现的,具体请看下面的代码。

 

 

 

----------------------无刷新上传主要的HTML代码(upload.html): ------------------------

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<title>AjaxUpload</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="scripts/jquery.js"></script>
<script type="text/javascript" src="scripts/interface.js"></script>
<style type="text/css" media="all">
*{
    margin:0;
    padding:0;
}

img{border:none;}

ul{
    list-style-type:none;
}

ul li{
    padding:2px 4px;
}

body{
    font-family: 宋体, 黑体,verdana, Arial;
    font-size:12px;
    color:#333;
    background:#DDDDDD;
    margin:30px;
    padding:0;
}

.box{
    border:1px solid #CCC;
    background:#FFF;
    padding:8px;
    margin:5px;
    clear:both;
}

.title {
    background:#F0F0F0;padding:5px;
    font-weight:bold;
}

.tooltip{
    background:#F0F0F0;
    border-color:#bbb;
}

.tooltip h1 {
    color:#A8DF00;
    font-family: 微软雅黑,黑体,宋体,verdana, Arial;
}

.titlebutton{
    float:right;
}

.uploading{
    background:#FFF;
    color:#444;
    text-align:left;
    width:500px;
    padding:4px;
}

.image{
    border:1px solid #ddd;
    margin:2px;
    padding:1px;
    display:inline;
    width:300px;
}

.uploadcontrol {
    margin:4px 0;
    border-bottom:1px solid #F0F0F0;
}
</style>
<script type="text/javascript">
   
     $(document).ready(function(){         
          for(var i=0;i<5;i++)
          {
             uploadcreate($("#uploadbox"),i);
          }
    });
    
     var hideDiv = function(idName){
         $("#"+idName).fadeOut("fast");
     };
    
     //是否显示上传后的图片
     var isshowpic = true; 
     var uploadshowpic = function(el){
         isshowpic = !(isshowpic);
         if(isshowpic)
         {
             el.html("图片显示关闭");
         }
         else
         {
             el.html("图片显示开启");
         }
     };
    
     //载入中的GIF动画
    var loadingUrl = "images/ajax-loader.gif";
   
    //选择文件后的事件,iframe里面调用的
    var uploading = function(imgsrc,itemid){
        var el = $("#uploading"+itemid);
        $("#ifUpload"+itemid).fadeOut("fast");
        el.fadeIn("fast");
        el.html("<img src='"+loadingUrl+"' align='absmiddle' /> 上传中");
        return el;
    };
   
    //重新上传方法   
    var uploadinit = function(itemid){
        currentItemID ++;
        $("#uploading"+itemid).fadeOut("fast",function(){
             $("#ifUpload"+itemid).fadeIn("fast");
             $("#panelViewPic"+itemid).fadeOut("fast");
        });
              
    };
   
    //上传时程序发生错误时,给提示,并返回上传状态
    var uploaderror = function(itemid){
        alert("程序异常,"+itemid+"项上传未成功。");
        uploadinit();
    };
   
    //上传成功后的处理
    var uploadsuccess = function(newpath,itemid){
        $("#uploading"+itemid).html("文件上传成功. <a href='javascript:void(0);' οnclick='uploadinit("+itemid+");'>[重新上传]</a>");
        if(isshowpic)
        {
            $("#panelViewPic"+itemid).html("<a href='"+newpath+"' title='点击查看大图' target='_blank'><img src='"+newpath+"' alt='' style='width:300px;' /></a>");       
            $("#panelViewPic"+itemid).fadeIn("fast");
        }
    };
   
   
    var currentItemID = 0;  //用于存放共有多少个上传控件了
    //创建一个上传控件
    var uploadcreate = function(el,itemid){
        currentItemID ++;
        if(itemid == null)
        {
            itemid = currentItemID;
        } 
        var strContent = "<div class='uploadcontrol'><iframe src=/"upload.aspx?id="+itemid+"/" id=/"ifUpload"+itemid+"/" frameborder=/"no/" scrolling=/"no/" style=/"width:400px; height:28px;/"></iframe>";
        strContent += "<div class=/"uploading/" id=/"uploading"+itemid+"/" style=/"display:none;/" ></div>";
        strContent += "<div class=/"image/" id=/"panelViewPic"+itemid+"/" style=/"display:none;/"></div></div>";
        el.append(strContent);
    };
    
</script>

</head>

<body>

<div id="tipbox" class="box tooltip">
    <a href="#" οnclick="hideDiv('tipbox');">[关闭]</a>
    <div class="content">
        <h1>AjaxUpload - 多文件无刷新上传源代码 v1.0</h1>
        <p>作者:李华顺 <a href="http://huacn.cnblogs.com" target="_blank">http://huacn.cnblogs.com</a></p>
    </div>
</div>
<div id="toolbox" class="tooltip box">
    <a href="#" οnclick="uploadcreate($('#uploadbox'));">添加一个新上传控件</a> <a href="#" οnclick="uploadshowpic($(this));">图片显示关闭</a>
</div>
<div id="uploadbox" class="box">
   
</div>

</body>

</html>

 

 

 

 

 

 

 

 

 

 

 

 

 

-------------------------------------------------上传功能的页面代码(upload.aspx): --------------------------

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="upload.aspx.cs" Inherits="upload" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>上传</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript" src="scripts/jquery.js">
</script>
    <script type="text/javascript" src="scripts/interface.js">
</script>
    <style type="text/css">

        *{ margin:0; padding:0; }
       
   
</style>
    <script type="text/javascript">
var uploadSelect = function(el){
            el.fadeOut("show");       
            parent.uploading(document.getElementById("<%=file1.ClientID %>").value,'<%=itemID %>');
            $("#<%=frmUpload.ClientID %>").submit();
        };
</script>
</head>
<body>
    <form runat="server" id="frmUpload" method="post" enctype="multipart/form-data">
        <input type="file" runat="server" id="file1" size="40" οnchange="uploadSelect($(this));" />       
    </form>
</body>
</html>

 

 

 

 

 

 

 

 

--------------------------------------------上传功能的服务端代码(upload.aspx.cs) -----------------------------------------------

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;

public partial class upload : System.Web.UI.Page
{
    string picPath = "";
    string picServer = "/upload";
    protected string itemID = "";
    protected void Page_Load(object sender, EventArgs e)
    {

        if (Request.QueryString["id"] != null)
        {
            itemID = Request.QueryString["id"];
        }

        if (IsPostBack)
        {
            picPath = Server.MapPath("//upload");
            doUpload();
        }
    }

    protected void doUpload()
    {
        try
        {
            HttpPostedFile file = file1.PostedFile;
            string strNewPath = GetSaveFilePath() + GetExtension(file.FileName);
            file.SaveAs(picPath + strNewPath);
            string urlPath = picServer + strNewPath;
            urlPath = urlPath.Replace("//", "/");
            WriteJs("parent.uploadsuccess('" + urlPath + "','" + itemID + "'); ");

        }
        catch (Exception ex)
        {
            WriteJs("parent.uploaderror();");
        }
    }

    private string GetExtension(string fileName)
    {
        try
        {
            int startPos = fileName.LastIndexOf(".");
            string ext = fileName.Substring(startPos, fileName.Length - startPos);
            return ext;
        }
        catch (Exception ex)
        {
            WriteJs("parent.uploaderror('" + itemID + "');");
            return string.Empty;
        }
    }

    private string GetSaveFilePath()
    {
        try
        {
            DateTime dateTime = DateTime.Now;
            string yearStr = dateTime.Year.ToString();
            ;
            string monthStr = dateTime.Month.ToString();
            string dayStr = dateTime.Day.ToString();
            string hourStr = dateTime.Hour.ToString();
            string minuteStr = dateTime.Minute.ToString();
            string dir = dateTime.ToString(@"//yyyyMMdd");
            if (!Directory.Exists(picPath + dir))
            {
                Directory.CreateDirectory(picPath + dir);
            }
            return dir + dateTime.ToString("yyyyMMddhhmmssffff");
        }
        catch (Exception ex)
        {
            WriteJs("parent.uploaderror();");
            return string.Empty;
        }
    }

    protected void WriteJs(string jsContent)
    {
        this.Page.RegisterStartupScript("writejs", "<script type='text/javascript'>" + jsContent + "</script>");
    }

}

 

 

 

 

 

 

 

 

 

----------------------------------------------------------------------------------------------------------------

基本上就是这些,重点请看第一部份的代码,主要是JS控件显示,还有一个重点是upload.aspx调用父级页面的方法这些实现。

Javascript无刷新上传演示地:http://www.wathon.com/opensource/js/ajaxuploadv1/upload.html

源代码下载地址:http://www.wathon.com/opensource/js/ajaxuploadv1/ajaxupload_src.zip

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值