<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<script language=javascript>
 var xmlhttp;
 var ado_stream;
 var mFileName,mPartStart,mPartID,mPartEnd;
 var SendCount;
 var BlockSize;
 var Breaked;
 var aryFiles;
 BlockSize=1024*100;//每次发送字节数 
 Breaked=false;
 aryFiles=new Array();// 开始发送文件
function BeginSendFiles() 
{  
  var name=document.myform.file1.value;
  var rgExp=/\\/gi;
  var rgText=unescape("\\")+unescape("\\");
  var filename=name.replace(rgExp,rgText);
  var replaceText=/\b\w+.\w+$/gi;
  var FullFileName =replaceText.exec(filename);
  document.myform.filename.value=FullFileName;
  initAryFiles(filename);
  SendFile(aryFiles.pop());
 } // 构造待发送文件的数组 
function initAryFiles(filename) 
{ 
  aryFiles.push(filename); 			//c:\\aaa.zip c:\\bbb.exe本地文件
  aryFiles.reverse();//文件名
 }
function SendFile(vFullPath) 
{ // 空文件则不执行上传
 if (!vFullPath) 
 {  
 	alert("请选择上传的文件");		
   return false; 
 } 
 Breaked=false;
 div_message.innerHTML="";
 ado_stream=new ActiveXObject("ADODB.Stream"); // 读取文件的流
 ado_stream.Type=1; 
 ado_stream.Open();
 ado_stream.LoadFromFile(vFullPath); // 读取文件 
 ado_stream.position=0;
 SendCount=Math.ceil(ado_stream.size/BlockSize);// 如果有余数则多发送一次 //
 alert(SendCount);		//发送的次数
 var reg=/\b\w+.\w+$/gi;
 mFileName =reg.exec(vFullPath);
 mPartStart=true;
 mPartID=1;
 mPartEnd =false;
 SendData();
 } 
function SendData() 
{ 
 if (SendCount > 0) 
 {
   var dom=new ActiveXObject("msxml2.DOMDocument"); // 发送的xml文件
   dom.async=false; 
   dom.resolveExternals=false; // 构造xml文件头 
   var node=dom.createProcessingInstruction("xml","version='1.0'");
   dom.appendChild(node);
   node=null;// 构造root节点 
   var root=dom.createElement("root"); 
   dom.appendChild(root);
   dom.documentElement.setAttribute("xmlns:dt","urn:schemas-microsoft-com:datatypes"); // 构造保存二进制数据的节点updata 
   node =dom.createElement("upData");
   node.dataType="bin.base64";//bin。base64编码
   var att=dom.createAttribute("FileName");// 文件名属性
   att.value=mFileName;
   node.setAttributeNode(att);
   att=null;
   var att=dom.createAttribute("PartStart");// 分段开始标记 
   att.value =mPartStart;
   node.setAttributeNode(att);
   att=null;
   var att =dom.createAttribute("PartID");// 分段序号 
   att.value=mPartID;
   node.setAttributeNode(att);
   att=null;
   var att =dom.createAttribute("PartEnd");// 分段结束标记 
   att.value=mPartEnd;node.setAttributeNode(att);
   att=null;
   root.appendChild(node);
   node.nodeTypedValue=ado_stream.Read(BlockSize); // 节点数据从stream读取，固定长度
   node=null;SendCount-=1;
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   xmlhttp.open("POST","SendFile.asp", false);		//http://www.xxx.com/xxx/xxx.asp 为web路径上的文件 
   xmlhttp.onreadystatechange=CallBack;
   xmlhttp.send(dom); 
   mPartStart=false;
   xmlhttp=null;
   }
 else 
 { 
  ado_stream.Close(); 
  ado_stream=null;
  } 
} 
function CallBack()
{ // 上传成功 
 if(xmlhttp.readystate== 4) 
  { // 检查是否中断上传 
    if(Breaked) 
	{
       return;} 
 if (SendCount > 0) 
 { 
 mPartID += 1;//
  div_message.innerHTML += ("<br>" + xmlhttp.ResponseText);
  var p= Math.floor((mPartID/(Math.ceil(ado_stream.size/BlockSize) + 1)) *100);// 计算进度百分比
  ShowBar(p);
  var t=setTimeout("SendData();", 1);
  }
else { // 传送完文件 //
div_message.innerHTML += mFileName +"传送完毕！<br>";// 继续传下一文件 
 ShowBar(0);var cFile=aryFiles.pop(); 
 SendFile(cFile);
 } 
 }
} 
function ShowBar(per) 
{ // 进度条 
ddd.innerHTML= "<br><table width='200' border=0 cellpadding='0' cellspacing='0'><tr><td bgcolor='#6699FF'><input type=button style='width:" + per + "%;border:0px; background:#005599; color:#FFFFFF' value=" + per + "%> </td></tr></table>";}
</script>
<html>
<head>
</head>
<body> 
<table width="80%">
<form action="UpLoadFile.asp" name="myform" method="post">
  <tr valign="top">
    <td><input type="file" name="file1">
      &nbsp;
      <input type="button" name="Submit" value="提交" onclick="JavaScript:BeginSendFiles();"></td>
    <input type="hidden" name="filename">
  </tr>
  </form>
</table>
<div id="ddd" width=300px></div> 
<DIV id=div_message></DIV>
</body>
</html>
