我用vb xmlHttp做了个文件传输的例子,
自觉是个挺值得看的例子,所以贴出来和大家一起交流一下。
xml结构:
<?xml version="1.0">
<boot><file1>文件以二进制方式存在这里</file1></boot>下面开始
Private Sub CreateAndTranXML()
 
   Dim ado_stream   As New ADODB.Stream
   Dim xml_dom   As New MSXML2.DOMDocument30
   Dim strA As String, szFile As String, m_szUpFile As String
     
   m_szUpFile = "http://127.0.0.1/getupFile.asp" ‘server端的ASP接受程序
   szFile = App.Path & "\temp.jpg"   '要传送的jpg文件或任何文档
   strA = "<?xml  version=" & Chr(34) & "1.0" & Chr(34) & " ?>  <root/>"
   xml_dom.loadXML (strA)   xml_dom.documentElement.setAttribute "xmlns:dt", "urn:schemas-microsoft-com:datatypes"   Dim l_node1
   Set l_node1 = xml_dom.createElement("file1") '建立一个节点
   l_node1.dataType = "bin.base64"
 
   ado_stream.Type = 1    '  1=adTypeBinary
   ado_stream.open
   ado_stream.LoadFromFile (szFile)
   l_node1.nodeTypedValue = ado_stream.Read(-1)      '  -1=adReadAll
   ado_stream.Close
   xml_dom.documentElement.appendChild (l_node1)
   
   xml_dom.save App.Path & "\result.xml" '本地保存一个备份
   '可以创建多个二进制节点,一次上传多个文件
    
   ' 把XML文档发送到Web服务器
   
   Dim xmlHttp As New MSXML2.XMLHTTP30
 
   xmlHttp.open "POST", m_szUpFile, False
   xmlHttp.setRequestHeader "CONTENT-TYPE", "text/xml"
   xmlHttp.send xml_dom
   '  显示服务器返回的信息
   Debug.Print xmlHttp.responseText
      
   If xmlHttp.Status = 200 Then
      MsgBox ("上传成功!")
   End If
   Set xmlHttp = Nothing
   Set xml_dom = Nothing
End SubGetUpFile.asp(Server端的)
<%
   Dim ado_stream
   Dim oXmlDom 
   Dim xml_file1,m_szpath
    
   Set oXMLDoc = Server.CreateObject("Microsoft.XMLDOM") 
   szPath=server.mappath("getupfile.asp")
   nPos=instrRev(szPath ,"\")
   m_szPath=left(szPath,nPos)
   
   response.write szPath
   oXMLDoc.load request
   szNow=year(now()) & month(now()) & day(now()) & hour(now()) & minute(now()) & second(now())
   szpath=m_szPath  & "upfile.xml"
   oXMLDoc.save szPath  
   
   '  创建  Stream  对象
   Set ado_stream = Server.CreateObject("ADODB.Stream")
  
   '  读出包含二进制数据的节点
   Set xml_file1 = oXMLDoc.selectSingleNode("/root/file1")
    
   '  打开Stream对象,把数据存入其中
   ado_stream.Type = 1    '  1=adTypeBinary
   ado_stream.open
   ado_stream.Write xml_file1.nodeTypedValue
   '  文件存盘
   szPath=m_szpath &"images\" & szNow & ".jpg" '存储文件
   ado_stream.SaveToFile szpath, 2  '  2=adSaveCreateOverWrite
   response.write szpath
   ado_stream.Close
    
   '  销毁对象
   Set ado_stream = Nothing
   Set xmlDoc = Nothing
%>
程序在win2000已经测试通过,不过这里有个问题不能解决,
就是xmlHttp和AdoStream都可以保存文件,但都不能建立文件夹,
就是可读写文件,但无法对目录操作。
因为我有个想法用xmlhttp替代winsock来做,
server端也写个vb程序来接受xmlHttp的东西,
哪位大大有做过或看过的,能給我指点迷津,不用客气的。

解决方案 »

  1.   

    搂主,哪里抄的,坦白从宽
    不过是好东东,收藏了,加几个标志
    也可以使用Stream对象把数据放到数据库的BLOB型字段中。 
        
    使用该方法的益处 
        
       不引起页面转换。 
       不需要专用组件。 
       可同时上传多个文件。 
       这段程序是纯脚本写成的,可以很容易的插入到其他代码中,而不需要任何HTML对象的配合。还可以把这个逻辑在任何支持COM标准的语言中实现。 
        
       系统安全考虑 
        
       该方法如果不用VB只用VBscript 只能使用于内部网络,因为它需要IE5的安全级别设置为“低”。必须: 
        
       允许脚本和ActiveX对象。该设置允许浏览器执行类似  "myobj  =  new  activexobject(...)"的  JScript语句; 
       必须允许穿越域访问数据源。这个设置允许在客户端使用Stream对象。还必须在服务器和客户端都安装MS  XML  DOM  3.0  和MDAC  2.5  。 
        
      

  2.   

    用xmlHttp代替winsock的大部分工作,
    好象不可能吧
    不过我觉得倒是可以替代不需要对文件夹进行增删的ftp工作
    不知道哪位大侠可以出来,或拿出更好的例子让我们学习学习