奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 程序开发 >> XML >> 使用xmlhttp 实现多文件上传
程序开发
Asp
PHP
JSP
CGI/Perl
XML
.Net
C/C++/C#
Visual Basic
Visual C++
Delphi
Java
汇编语言
  • .Net的精髓XML和SOAP简

  • 使用XMLHTTP制作域名查

  • 什么是XML

  • XML for Analysis 规范

  • XML for Analysis 规范

  • XML for Analysis 规范

  • 修改大型 XML 文件的有

  • 通过xalan实现关系型数

  • 使用xmlhttp 实现多文件上传
    字体:

    中华网络安全联盟    作者:佚名    来源:网络转载    时间:2006-3-20

        如今xml技术渐渐成熟,成为了一种网站传播数据的又一种方式,下面是我用xmlhttp写的一个多文件上传程序.包括客户端和服务端两部分..

    本程序的实现是利用xml可以在其结点存放经base64编码的二进制文件,先在客户端生成包含要传文件的xml 再,通过xmlhttp发送到服务端.下面是客户端:

    <html>

    <!--

    xmlupload.htm by 九天神龙

    http://www.5ucode.com

    xkou@hotmail.com

    //-->

    <META http-equiv=Content-Type content="text/html; charset=gb2312">

    <title>XML上传客户端</title>

    提交到asp页面<input type=text id="postto" size="30"

    value="http://localhost/up.asp"

    /><br>

    上传到服务器路径<input value="\"

    type=text id="postpath" onblur="if(this.value.charAt(this.value.length-1)!='\\') this.value+='\\';" /><br>

    设定文件上传数:<input type=text value=5 size=5 id="upnum"> &nbsp;<button onclick=displayForm(parseInt(upnum.value));>设定</button>

    <div id=div1></div><button onclick=sendfile()>上传</button><br /><br />返回信息:

    <div id="div_message" style="margin-left:20px;padding:10px;border:1px solid silver;"/>

    <SCRIPT LANGUAGE="JavaScript">

    <!--

    function displayForm(i){ //显示指定数目的textbox

    if(i<2) i=2;

    var tal="";

    for(a=1;a<=i;a++){

    str=a+".<input type=file id='upfile'><br />";

    tal+=str;

    }

    div1.innerHTML=tal;

    }

    displayForm(2);

    function sendfile(){

    //创建dom对象

    var xmldom=new ActiveXObject("MSXML2.DOMDocument");

    xmldom.async=false;

    //载入外部xml 文件,在与本文件同一目录下建一 xml.xml 内容为 <root></root>

    xmldom.load("xml.xml");

    //建立本地ado 对象

    var ado=new ActiveXObject("ADODB.Stream");

    ado.Type=1; // 1=adTypeBinary ado_stream;

    var allfile=document.all("upfile");

    //alert(allfile.length);

    //循环读取textbox

    for(a=1;a<=allfile.length;a++){

    if(allfile[a-1].value!=""){

    //创建一个file节点

    var fnode=xmldom.createElement("file");

    xmldom.documentElement.appendChild(fnode);

    var lastnode=xmldom.documentElement.lastChild;

    //文件名

    fnode=xmldom.createElement("name");

    fnode.text=(postpath.value+allfile[a-1].value.replace(/(.*)\\/g,""));

    lastnode.appendChild(fnode);

    //内容

    fnode=xmldom.createElement("content");

    fnode.dataType = "bin.base64";

    ado.Open();

    ado.LoadFromFile(allfile[a-1].value);

    fnode.nodeTypedValue=ado.Read(-1);

    ado.Close();

    lastnode.appendChild(fnode);

    }

    }

    //alert(xmldom.xml);

    div_message.innerHTML ="Data has send,please wait....";

    var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

    xmlhttp.open("POST",postto.value,false);

    xmlhttp.send(xmldom);

    //将接受到的数据变为UNICODE文本

    var info=BytesToBstr(xmlhttp.ResponseBody,"GB2312");

    div_message.innerHTML=info;

    if(info.charAt(0)=="b")

    //如果是上传文件为空,则获取服务端所在文件夹

    postpath.value=info.replace(/.*by ([a-zA-Z]:\\.*\\).*/g,"$1");

    }

    //-->

    </SCRIPT>

    <SCRIPT LANGUAGE=vbscript>

    function BytesToBstr(body,Cset) //将收到的数据转为UNICODE

    dim objstream

    set objstream =CreateObject("adodb.stream")

    objstream.Type=1

    objstream.Mode=3

    objstream.Open

    objstream.Write body

    objstream.Position=0

    objstream.type=2

    objstream.Charset=Cset

    BytesTobstr=objstream.ReadText

    objstream.Close

    set objstream=nothing

    end function

    </script>

    客户端完成

    服务端比较简单:

    <%Response.Expires=0

    ‘upload.asp by 九天神龙

    ‘http://www.5ucode.com

    ‘xkou@hotmail.com

    set d=Server.CreateObject("ADODB.Stream")

    set x=Server.CreateObject("MSXML2.DOMDocument")

    x.load(request)

    set r=x.documentElement

    //循环读取结点

    For i=0To(r.childNodes.length-1)

    set fn=r.childNodes(i).childNodes(0)

    set xf=r.childNodes(i).childNodes(1)

    d.Type=1

    d.open

    d.Write xf.nodeTypedValue //读取后写入

    d.SaveToFile fn.text,2

    d.close%>

    <%=fn.text%> ok!<BR><%next

    set d=Nothing

    set x=Nothing%>by <%=server.mappath(Request.ServerVariables("SCRIPT_NAME"))%> execute OK!

    使用时当上传两个3M的文件时,cpu使用占100%,当前窗口出现假死现象.但过一会就可以完成.

    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.