浏览 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> 其实还是一种 页面提交。 还有没有更好的 解决办法呢? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-03-03
另外,现在网上大部分解决方案 采用了 jspsmartupload.jar 。
这个包 个人觉得是有问题的。 如果是大并发量,结果是死悄悄 能否 在页面上 写一个用c++ 做一个cab的上传程序。这个cab 通过http把文件读到缓冲里? |
|
| 返回顶楼 | |
|
最后更新时间: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" /> |
|
| 返回顶楼 | |


