<font size=18>test.htm上传文件表单页面代码: <HTML> <HEAD> <TITLE>File Send</TITLE> </HEAD> <BODY> <INPUT id=filename name=filename type=file>
<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() { if (filename.value=="") { alert("文件不存在,或文件内容为空。"); return false; } //创建 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 file_body = xml_dom.createElement("file_body"); file_body.dataType = "bin.base64"; //打开Stream对象,读源文件 ado_stream.Type = 1; // 1=adTypeBinary ado_stream.Open(); ado_stream.LoadFromFile(filename.value); //将文件内容存入XML节点 file_body.nodeTypedvalue = ado_stream.Read(-1); // -1=adReadAll ado_stream.Close(); xml_dom.documentElement.appendChild(file_body); // //创建一个新节点,设置其为字符串型数据 var file_name = xml_dom.createElement("file_name"); file_name.dataType = "string"; //将文件名存储在此节点 file_name.nodeTypedvalue = filename.value.toString(); xml_dom.documentElement.appendChild(file_name); // //可以创建多个二进制节点,一次上传多个文件
//把XML文档发送到Web服务器 var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.open("POST","./test.asp",false); xmlhttp.send(xml_dom); //显示服务器返回的信息 div_message.innerHTML = xmlhttp.ResponseText; } </SCRIPT>
<font size=18>test.asp上传文件处理程序代码:
<%@ LANGUAGE=VBScript%> <% Option Explicit Response.Expires = 0 ' 定义变量和对象。 dim ado_stream dim xml_dom,filename dim xml_file1,xml_file2
'创建 Stream 对象 set ado_stream = Server.CreateObject("ADODB.Stream") '从Request对象创建 XMLDOM对象 set xml_dom = Server.CreateObject("MSXML2.DOMDocument") xml_dom.load(request)
'读出文件的文件名 set xml_file2 = xml_dom.selectSingleNode("root/file_name") filename = ParseFileName(Cstr(xml_file2.nodeTypedvalue))
'读出包含二进制数据的节点 set xml_file1 = xml_dom.selectSingleNode("root/file_body")
' 打开Stream对象,把数据存入其中 ado_stream.Type = 1 ' 1=adTypeBinary ado_stream.open ado_stream.Write xml_file1.nodeTypedvalue ' 文件存盘 dim filepath if right(server.mappath("upload"),1)<>"\" then filepath = Server.mappath("upload") + "\" + filename else filepath = server.mappath("upload") + filename end if ado_stream.SaveToFile filepath,2 ' 2=adSaveCreateOverWrite ado_stream.close ' 销毁对象 set ado_stream = Nothing set xml_dom = Nothing ' 向浏览器返回信息 Response.Write "Upload successful!"+ filename
Function ParseFileName (sFileIn) Dim I For I = Len(sFileIn) To 1 Step -1 If InStr("\", Mid(sFileIn, I, 1)) Then Exit For Next ParseFileName = Mid(sFileIn, I + 1, Len(sFileIn) - I) End Function %>

|