XMLHTTP-超大文本上传

<html><head>

<title>案件原始资料上传</title>
<script language="javascript" src="../../public/js/service.js"></script>


</head>
<body οnlοad="initial()" bgcolor="#EFF3FF">
<p>-----------------------------------------------------------------------------------------</p>
<p>
<p>说明:文件上传采用XMLHTTP协议。屏去传统的FORM表单形式,通过base64编码分块,因此支持超大文本上传。</p>
<p>-----------------------------------------------------------------------------------------</p>

 

<p>选择要上传的图片文件<input type=file name="file" style="width:300px" οnclick="initfile()">


<input type="hidden" id="casenum",value="">

 <input type=button style="cursor:hand;width:60pt" οnclick="BeginSendFiles();"value="上传文件" />
<input type=button style="cursor:hand;width:60pt" οnclick="javascript:Breaked=true;" value="中断上传" />
<input type=button style="cursor:hand;width:60pt" οnclick="javascript:window.close();" value="退出本页" />
<br><br>
  <div id="processbar"  width=300px>
  </div>
  <br>
<DIV
   id=div_message>
</DIV>
</body>

</html>

<script language=VBScript>
Function I0a(l0a)
  OI=""
  For Olb=1 To LenB(l0a)
     IO=AscB(MidB(l0a,Olb,1))
  If IO<&H80 Then
       OI=OI&Chr(IO)
  Else
      O1a=AscB(MidB(l0a,Olb+1,1))
      OI=OI&Chr(CLng(IO)*&H100+CInt(O1a))
      Olb=Olb+1
  End If
Next
     I0a=OI
End Function
</script>

 

<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 initial(){

   var caseno=window.dialogArguments;
         if(caseno==null){
             caseno=document.all.casenum.value;
         }
         if(caseno==null) {
              alert("没有相对应的举报案件");
              window.close();
              return;
         }

         document.all.casenum.value=caseno;
      }


function BeginSendFiles() {
    div_message.innerHTML="";
     initAryFiles() ;
    SendFile(aryFiles.pop()) ;
} // 构造待发送文件的数组

 function initAryFiles() {
  //aryFiles.push("c://aaa.zip");
  //aryFiles.push("c://bbb.exe") ;
  //c://aaa.zip c://bbb.exe本地文件

  aryFiles.push(document.all.file.value);
 
  aryFiles.reverse() ;//文件名
  if(aryFiles[0].length<=0){
       alert("文件名为空,不能上传");
  }
}
function SendFile(vFullPath) { // 空文件则不执行上传
  if (!vFullPath) { return ; }
  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 ;
     BlockSize=ado_stream.size;
  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("MSXML2.XMLHTTP");

        var url="insert.jsp?casenum="+document.all.casenum.value;

        xmlhttp.open("POST",url, false);//http://www.xxx.com/xxx/xxx.asp 为web路径上的文件
        xmlhttp.onreadystatechange=CallBack ;
xmlhttp.setRequestHeader("CONTENT-TYPE","multipart/form-data");

        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) { // 进度条
   processbar.innerHTML= "<table width='100%' 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>" ;
}
function initfile(){
  processbar.innerHTML="";
div_message.innerHTML="";
}
</script>


<script>
  function initial(){

   var caseno=window.dialogArguments;
         if(caseno==null){
             caseno=document.all.casenum.value;
         }
         if(caseno==null) {
              alert("没有相对应的举报案件");
              window.close();
              return;
         }

         document.all.casenum.value=caseno;
      }
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值