论坛首页 AJAX版 AJAX

该如何Ajax上传文件

浏览 609 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-03-03
Ajax 由于 安全机制的原因,不能读取本地的二进制文件。这个观点是否正确?
网上大部分解决方案是  用 隐藏的iframe
<form action="/pages/upload.jsp" id="form1" name="form1" encType="multipart/form-data"  method="post" target="hidden_frame" >
<input type="file" id="file" name="file" style="width:450">
<INPUT type="submit" value="上传文件"><span id="upldmsg"></span>
<br>
<font color="red">支持JPG,JPEG,GIF,BMP,SWF,RMVB,RM,AVI文件的上传</font>             
<iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
</form>
其实还是一种 页面提交。

还有没有更好的 解决办法呢?
   
最后更新时间:2008-03-03
另外,现在网上大部分解决方案 采用了 jspsmartupload.jar 。
这个包 个人觉得是有问题的。
如果是大并发量,结果是死悄悄

能否 在页面上 写一个用c++ 做一个cab的上传程序。这个cab 通过http把文件读到缓冲里?
   
0 请登录后投票
最后更新时间:2008-03-03
刚才在网上看到 一篇文章,很不错http://www.blueidea.com/bbs/archivecontent.asp?id=880985
事实上是xmlhttp技术来上传文件。  
   
只要构造了正确的提交格式,文件就传上去了。  

<script   language="javascript">  
  function   loadHttpXML(url,   sendObj,   doFunction,   method)  
  {  
  var   xmlhttp =   new   ActiveXObject("Msxml2.XMLHTTP")  
  var   xmldoc =   new   ActiveXObject("Msxml2.DOMDocument")  
  xmldoc.async   =   false  
  xmldoc.resolveExternals   =   false  
  var   method =   method   ?   method   :   "post"  
  if   (doFunction) xmlhttp.onreadystatechange   =   xmlhttpReadychange  
  xmlhttp.open(method,   url,   false)  
  //xmlhttp.setRequestHeader("content-type",   "application/x-www-form-urlencoded")  
  xmlhttp.setRequestHeader("content-type",   document.all["contentType"].value)  
  xmlhttp.send(sendObj)  
   
  if   (!doFunction)  
  {  
  xmldoc.loadXML(xmlhttp.responseText)  
  return   xmldoc  
  }  
   
  function   xmlhttpReadychange()  
  {  
  if   (xmlhttp.readyState   ==   4)  
  {  
  xmldoc.loadXML(xmlhttp.responseText)  
  doFunction(xmldoc)  
  //doFunction(xmlhttp.responseXML)  
  }  
  }  
  }  
   
  function   loadFile(path)  
  {  
  var   stream   =   new   ActiveXObject("ADODB.Stream")  
  stream.Type   =   1  
  stream.Open()  
  stream.LoadFromFile(path)  
  var   binaryStream   =   stream.Read()  
  stream.close()  
  return   binaryStream  
  }  
   
  function   send(form)  
  {  
  var   formDate   =   form.sendString.value   ?   form.sendString.value   :   alert("请选择文件")  
  sendbinary   =   hexToByte(strToHex(formDate.split("<!--file-->")[0])   +   byteToHex(loadFile(document.all["picPath"].value))   +   strToHex(formDate.split("<!--file-->")[1]))  
  loadHttpXML(form.action,   sendbinary)  
  pic.src   =   "myphoto"  
  }  
  </script>  
   
  <script   language="vbscript">  
  function   strToHex(str)  
  dim   i,   char,   hexValue  
  for   i=1   to   len(str)  
  char   =   hex(asc(mid(str,   i,   1)))  
  if   len(char)   =   1   then   :   char   =   "0"   &   char   :   end   if  
  hexValue   =   hexValue   &   char  
  next  
   
  strToHex   =   hexValue  
  end   function  
   
  function   hexTostr(hexStr)  
  dim   i,   char,   hexValue  
  for   i=1   to   len(hexStr)   step   2  
  char   =   mid(hexStr,   i,   2)  
   
  if   char   >   "80"   then  
  i   =   i+2  
  char   =   char   &   mid(hexStr,   i,   2)  
  end   if  
   
  Execute   "char   =   &H"   &   char  
  hexValue   =   hexValue   &   chr(char)  
  next  
   
  HexTostr   =   hexValue  
  end   function  
   
  </script>  
   
  <script   language="javascript">  
  function   byteToHex(byteStr)  
  {  
  var   xmldom   =   new   ActiveXObject("Microsoft.XMLDOM")  
  var   byteObj=   xmldom.createElement("byteObj")  
  byteObj.dataType   =   'bin.hex'  
  byteObj.nodeTypedValue   =   byteStr  
  return(String(byteObj.text))  
  }  
   
  function   hexToByte(hexStr)  
  {  
  var   xmldom   =   new   ActiveXObject("Microsoft.XMLDOM")  
  var   byteObj=   xmldom.createElement("byteObj")  
  byteObj.dataType   =   "bin.hex"  
  byteObj.nodeTypedValue   =   hexStr  
  return(byteObj.nodeTypedValue)  
  }  
   
  function   strToByte(str)  
  {  
  return   hexToByte(strToHex(str))  
  }  
   
  function   byteToStr(byteStr)  
  {  
  return   hexTostr(byteToHex(byteStr))  
  }  
  </script>  
   
  <form   action="xmlhttp.php"   onsubmit="event.returnValue   =   false;   send(this)">  
  <input   id="picPath"   type="file"   size="50"   /><br   />  
  <input   type=text   id=contentType   value="multipart/form-data,   boundary=AaB03x"   size="50"><br   />  
  <textarea   id=sendString   rows=30   cols=49>  
  --AaB03x  
  content-disposition:   form-data;   name="user"  
   
  Wilson   Peng  
  --AaB03x  
  content-disposition:   form-data;   name="myfile";   filename="myphoto"  
  Content-Transfer-Encoding:   binary  
   
  <!--file-->  
  --AaB03x  
  </textarea>  
  <input   type="submit"   value="send"/>  
  </form>  
   
  <img   id="pic"   src="myphoto"   />
   
0 请登录后投票
论坛首页 AJAX版 AJAX

跳转论坛:
JavaEye推荐