www.captainhostel.com.cn/xmlhttp_form.zip http://www.blueidea.com/bbs/NewsDetail.asp?id=880985

解决方案 »

  1.   

    不用input type=file怎么取的数据?
      

  2.   

    此代码不可通过服务器运行。
    请保存为本地htm文件,可将本地文件发送的服务器<title>动态加载文件</title>
    <form name=form>
    <input type=file name=file>
    <input type=button value=装入 onClick="document.frames.xxx.location = document.form.file.value">
    <input type=button value=提交 onClick="up()">
    <textarea name=text cols=60 rows=10></textarea>
    <iframe name=xxx src="" style="display:none" onLoad="document.form.text.value = document.frames.xxx.document.body.innerText"></iframe>
    </form><script>
    function saveXML(url,v) {
      var xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
      xmlHTTP.open("POST",url,false);  xmlHTTP.send(v);
      var s = xmlHTTP.responseText;
      if(xmlHTTP.responseText.indexOf("Error:")!=-1) {
        alert(xmlHTTP.responseText);
      }
      alert(s);
    }
    function up() {
      saveXML("http://localhost/test.php",document.form.text.value);
    }
    </script>
      

  3.   

    客户端以下示例代码使用Stream和MSXML对象完成文件上传动作。<HTML>
    <HEAD><TITLE>File Send</TITLE></HEAD>
    <BODY>
    <INPUT id=btn_send name="btn_send" type=button value="FILE SEND">
    <DIV id=div_message>Ready</DIV>
    </BODY>
    </HTML><SCRIPT LANGUAGE=JavaScript>// 上传函数
    function btn_send.onclick()
    {
    // 创建 ADO-stream 对象
    var ado_stream = new ActiveXObject("ADODB.Stream");// 创建包含默认头信息和根节点的 XML文档
    var xml_dom = new ActiveXObject("MSXML2.DOMDocument");
    xml_dom.loadXML('<?xml version="1.0" ?> <root/>');
    // 指定数据类型
    xml_dom.documentElement.setAttribute("xmlns:dt", "urn:schemas-microsoft-com:datatypes");// 创建一个新节点,设置其为二进制数据节点
    var l_node1 = xml_dom.createElement("file1");
    l_node1.dataType = "bin.base64";
    // 打开Stream对象,读源文件
    ado_stream.Type = 1; // 1=adTypeBinary 
    ado_stream.Open(); 
    ado_stream.LoadFromFile("c:\\tmp\\myfile.doc");
    // 将文件内容存入XML节点
    l_node1.nodeTypedValue = ado_stream.Read(-1); // -1=adReadAll
    ado_stream.Close();
    xml_dom.documentElement.appendChild(l_node1);// 可以创建多个二进制节点,一次上传多个文件// 把XML文档发送到Web服务器
    var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    xmlhttp.open("POST","./file_recieve.asp",false);
    xmlhttp.send(xml_dom);
    // 显示服务器返回的信息
    div_message.innerHTML = xmlhttp.ResponseText;
    }
    </SCRIPT>
    服务器端以下代码使用相同的对象提供服务器端的上传处理功能。<%@ LANGUAGE=VBScript%>
    <% Option Explicit
    Response.Expires = 0 ' 定义变量和对象。
    dim ado_stream
    dim xml_dom
    dim xml_file1' 创建 Stream 对象
    set ado_stream = Server.CreateObject("ADODB.Stream")
    ' 从Request对象创建 XMLDOM对象
    set xml_dom = Server.CreateObject("MSXML2.DOMDocument")
    xml_dom.load(request)
    ' 读出包含二进制数据的节点
    set xml_file1 = xml_dom.selectSingleNode("root/file1")' 打开Stream对象,把数据存入其中 
    ado_stream.Type = 1 ' 1=adTypeBinary 
    ado_stream.open 
    ado_stream.Write xml_file1.nodeTypedValue
    ' 文件存盘
    ado_stream.SaveToFile "c:\tmp\upload1.doc",2 ' 2=adSaveCreateOverWrite 
    ado_stream.close' 销毁对象 
    set ado_stream = Nothing 
    set xml_dom = Nothing
    ' 向浏览器返回信息
    Response.Write "Upload successful!"
    %>也可以使用Stream对象把数据放到数据库的BLOB型字段中。使用该方法的益处不引起页面转换。
    不需要专用组件。
    可同时上传多个文件。
    这段程序是纯脚本写成的,可以很容易的插入到其他代码中,而不需要任何HTML对象的配合。还可以把这个逻辑在任何支持COM标准的语言中实现。系统安全考虑该方法只能使用于内部网络,因为它需要IE5的安全级别设置为“低”。必须:允许脚本和ActiveX对象。该设置允许浏览器执行类似 "myobj = new activexobject(...)"的 JScript语句;
    必须允许穿越域访问数据源。这个设置允许在客户端使用Stream对象。还必须在服务器和客户端都安装MS XML DOM 3.0 和MDAC 2.5 。