ajax上传(xmlhttp上传文件突破大小限制)

    技术2022-05-11  70

    转自:优游客

     

    <HTML><HEAD><TITLE>File upload</TITLE></HEAD><BODY><form name="upload"><table width="100%" border="0" cellpadding="5" cellspacing="0">  <tr>    <td colspan="2">上传提示:Microsoft ADO/RDS此页正在访问其他域的数据。您允许这样做吗?</td>  </tr>  <tr>    <td width="100">您的图片</td>    <td><input name="pic" type="file" size="20"></td>  </tr>  <tr>    <td colspan="2" align="center"><input id="upbtn" type=button value="/blog/上传"></td>  </tr></table></form><img src="/blog/image.asp" border="0"></BODY></HTML><SCRIPT LANGUAGE=JavaScript>var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");var st, uptry{ st = new ActiveXObject("ADODB.Stream"); up = true}catch(e){ up = false}function upload.upbtn.onclick(){ var uPic = upload.pic.value if (validPic()!="") alert(validPic()) else{  if(!up) alert("您的浏览器版本太低,无法上传图片,请升级您的浏览器!")  else{   st.Type = 1;   st.Open();    try{    st.LoadFromFile(uPic);    var db = st.Read()    st.close()    var txtP = splitString(ByteToStr(db),100000)//这里把已经转换成字符串的文件切割一下,我是按10万字节长度切割的,也就是50KB    var xmldoc = new ActiveXObject("Microsoft.XMLDOM");    xmldoc.loadXML('<?xml version="1.0"?><root/>');    for (var i=0;i<txtP.length;i++){     var iPic = xmldoc.createElement("pic")     iPic.text = txtP[i];     xmldoc.documentElement.appendChild(iPic);    }    xmlhttp.open("POST","upload.asp",true);    xmlhttp.onreadystatechange = rep    xmlhttp.send(xmldoc);   }   catch(e){alert("无法找到文件!/n"+e.description)}  } }}function rep(){ if(xmlhttp.readyState==4){  if (xmlhttp.status==200){   alert(xmlhttp.responseBody)   location.reload()  }else   alert("status:"+xmlhttp.status+"/n"+xmlhttp.statusText) }}function validPic(){ var maxSize = 500//最大的尺寸限制 var str = '' var thisPic = new Image(); thisPic.src = upload.pic.value if(thisPic.src=="") str = '请选择您要上传的图片' else{  var picSize = thisPic.fileSize/1024  if(picSize>maxSize) str = '上传的图片不要大于'+maxSize+'KB,您的图片有'+picSize+'KB'  else{   var sPic = thisPic.src.split(".")   var pf = sPic[sPic.length-1].toLowerCase()   str = '未知的图片格式!'   var picF = new Array("gif","jpg","jpeg","bmp")   for (var i=0;i<picF.length;i++){    if (pf==picF[i]){     str = ''     break    }   }  } } return str}//把二进制文件转换成字符串function ByteToStr(p){ var xmldom = new ActiveXObject("Microsoft.XMLDOM"); xmldom.async = false xmldom.loadXML('<?xml version="1.0"?><root/>'); var tPic = xmldom.createElement("pic") tPic.dataType = 'bin.hex' tPic.nodeTypedValue = p xmldom.documentElement.appendChild(tPic); return(String(tPic.text))}//把字符串按你想要的长度切割function splitString(s,l){ var h = s.length var al = (s.length%l==0)?h/l:parseInt(String((s.length/l)).split(".")[0])+1 var a = new Array(al) for (var i=0;i<a.length;i++)  a[i] = s.substring(i*l,l*(i+1)) return(a)}</SCRIPT><img src="/blog/image.asp?id=0" border="0">upload.asp<%@ LANGUAGE=VBScript%><%Option Explicit%><%Response.ContentType="text/xml"Response.Charset="UTF-8"dim xmldomdim root,picset xmldom = Server.CreateObject("Microsoft.XMLDOM")xmldom.async = falsexmldom.load Requestif xmldom.parseError.errorCode<>0 then Response.BinaryWrite "未知的错误!"else if xmldom.readyState=4 then  xmldom.save Server.MapPath("image.xml")  Response.BinaryWrite "上传成功!"  '如果想直接放到数据库,就这么着:  'dim i,a,txtP,byteP  'set a = xmldom.documentElement.selectNodes("/root/pic")  'txtP = ""  'for i=0 to a.length-1  'txtP = txtP & a(i).text  'next  'byteP = StrToByte(txtP)'这就是你要的东东 end ifend if%><script language="javascript" runat="server">function StrToByte(str){ var xmldom = Server.CreateObject("Microsoft.XMLDOM") xmldom.loadXML('<?xml version="1.0"?><root/>') var bPic = xmldom.createElement("pic") bPic.dataType = "bin.hex" bPic.nodeTypedValue = str xmldom.documentElement.appendChild(bPic) return(bPic.nodeTypedValue)}</script>image.asp<%@language=jscript%><%var xmldoc = new ActiveXObject("Microsoft.XMLDOM")xmldoc.async = falsexmldoc.load(Server.MapPath("image.xml"))if (xmldoc.parseError.errorCode!=0){ Response.Write("error")}elsevar a = xmldoc.documentElement.selectNodes("/root/pic") var pic = '' for (var i=0;i<a.length;i++)  pic += a[i].text//这里就是把数据重组 Response.BinaryWrite(StrToByte(pic))}//把字符串转换成二进制流function StrToByte(str){ var XMLDOC = Server.CreateObject("Microsoft.XMLDOM") XMLDOC.loadXML('<?xml version="1.0"?><root/>') var bPic = XMLDOC.createElement("pic") bPic.dataType = "bin.hex" bPic.nodeTypedValue = str XMLDOC.documentElement.appendChild(bPic) return(bPic.nodeTypedValue)}%> 


    最新回复(0)