我用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的东西,
哪位大大有做过或看过的,能給我指点迷津,不用客气的。
自觉是个挺值得看的例子,所以贴出来和大家一起交流一下。
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的东西,
哪位大大有做过或看过的,能給我指点迷津,不用客气的。
不过是好东东,收藏了,加几个标志
也可以使用Stream对象把数据放到数据库的BLOB型字段中。
使用该方法的益处
不引起页面转换。
不需要专用组件。
可同时上传多个文件。
这段程序是纯脚本写成的,可以很容易的插入到其他代码中,而不需要任何HTML对象的配合。还可以把这个逻辑在任何支持COM标准的语言中实现。
系统安全考虑
该方法如果不用VB只用VBscript 只能使用于内部网络,因为它需要IE5的安全级别设置为“低”。必须:
允许脚本和ActiveX对象。该设置允许浏览器执行类似 "myobj = new activexobject(...)"的 JScript语句;
必须允许穿越域访问数据源。这个设置允许在客户端使用Stream对象。还必须在服务器和客户端都安装MS XML DOM 3.0 和MDAC 2.5 。
好象不可能吧
不过我觉得倒是可以替代不需要对文件夹进行增删的ftp工作
不知道哪位大侠可以出来,或拿出更好的例子让我们学习学习