"MSXML2.XMLHTTP"与“ADODB.Stream”结合下载HTTP上的文件程序是运行正常,很小的图片如1K左右没问题,大图片的话,文件保存时就会出问题,我看了下错误提示,似乎是因为不能一次性写入太长的byte数组。我是想把读到的流分批写入,但是不知道改如何去写。在运行到标红的代码时出现的问题。请各位大侠帮帮忙,谢谢!!源代码如下:
Function GetHttpFile(strHTTPPath As String) As String
If strHTTPPath <> "" Then
Dim a As Variant
Set a = createObject("MSXML2.XMLHTTP")
a.open "get", strHTTPPath, False
a.send
Dim b As Variant
Dim fso As Variant
Set b = createObject("ADODB.Stream")
b.Type = 1
b.open
Set fso = createObject("Scripting.FileSystemObject")
If a.status = 200 Then
b.Write a.responseBody
If fso.FileExists("d:\temp\userinfo.xls") Then
Call fso.DeleteFile("c:\temp\userinfo.xls", True)
End If
b.SaveToFile "c:\temp\userinfo.xls"
End If
b.Close
Set b = Nothing
Set fso = Nothing
End If
End Function
Function GetHttpFile(strHTTPPath As String) As String
If strHTTPPath <> "" Then
Dim a As Variant
Set a = createObject("MSXML2.XMLHTTP")
a.open "get", strHTTPPath, False
a.send
Dim b As Variant
Dim fso As Variant
Set b = createObject("ADODB.Stream")
b.Type = 1
b.open
Set fso = createObject("Scripting.FileSystemObject")
If a.status = 200 Then
b.Write a.responseBody
If fso.FileExists("d:\temp\userinfo.xls") Then
Call fso.DeleteFile("c:\temp\userinfo.xls", True)
End If
b.SaveToFile "c:\temp\userinfo.xls"
End If
b.Close
Set b = Nothing
Set fso = Nothing
End If
End Function
解决方案 »
- 1、如何将屏幕的图像放到dc中;2、如何再将dc中的图像根据鼠标单击、拖动坐标加框后放到屏幕上.
- 前些天有人说起的那个循环显示20-50的问题,确实有点意思,琢磨了两句代码
- 关于错误处理的问题
- 如何用vb将图片到入电子表格中
- 闷了好几天了,没有解开是用什么规律编的码?喜欢找规律的进,,,有分
- 我在winXP上安装Sql server,但是在服务帐户处,老是提示密码错误,虽然密码绝对正确
- 菜鸟一个简单的问题!!!关于combo控件
- 关于数据转的问题,请高手帮忙!
- 批处理在整个C盘自动搜索指定文件,找到跳到A程序,找不到跳到C程序
- 如果要在一个数据库中的一个字段里存储一个目录树的结构信息,如何做呢?
- 计算机基础考试系统 API
- 如何让字符串全变成相同位数的。比如数据库表中为2-8位,但是取出来时想变成全是8位的,不足8位后补空格,就是为了整齐好看
Private m_sWebPage As String
Private m_sUserName As String
Private m_sPassWord As String
Private m_UploadMessage As StringPublic Property Let FileName(ByVal UploadFileName As String)
m_sFileName = UploadFileName
End PropertyPublic Property Let WebPage(ByVal UploadWebPage As String)
m_sWebPage = UploadWebPage
End PropertyPublic Property Let UserName(ByVal LoginName As String)
m_sUserName = LoginName
End PropertyPublic Property Let LoginPsWd(ByVal PassWord As String)
m_sPassWord = PassWord
End PropertyPublic Property Get Message() As String
Message = m_UploadMessage
End PropertyPublic Function UploadFile() As Boolean
On Error GoTo UploadFile_Error m_UploadMessage = ""
If Len(m_sFileName) = 0 Then
m_UploadMessage = "未设置上传的文件。"
UploadFile = False
Exit Function
End If
Dim XMLDocument As New DOMDocument
Dim ADOStream As New Stream
Dim DOMElement As IXMLDOMElement
Dim MyXMLHttp As New XMLHTTP
XMLDocument.loadXML ("<?xml version=""1.0"" ?> <root/>")
XMLDocument.documentElement.setAttribute "xmlns:dt", "urn:schemas-microsoft-com:datatypes"
Set DOMElement = XMLDocument.createElement("File")
DOMElement.dataType = "bin.base64"
ADOStream.Type = adTypeBinary
ADOStream.Open
ADOStream.LoadFromFile m_sFileName
DOMElement.nodeTypedValue = ADOStream.Read
ADOStream.Close
XMLDocument.documentElement.appendChild DOMElement
'请在下面再添加一个文件名的节点
MyXMLHttp.Open "POST", m_sWebPage, False, m_sUserName, m_sPassWord
MyXMLHttp.send XMLDocument
m_UploadMessage = MyXMLHttp.responseText
If m_UploadMessage = "OK" Then
m_UploadMessage = ""
UploadFile = True
Else
UploadFile = False
End If
UploadFile_Exit:
m_sFileName = ""
Set XMLDocument = Nothing
Set ADOStream = Nothing
Set DOMElement = Nothing
Set MyXMLHttp = Nothing
Exit Function
UploadFile_Error:
UploadFile = False
Debug.Print CStr(Now()) & "--->" & vbCrLf & _
"ErrAddress: VanFileTransfer->VanFileDownLoad->UploadFile" & vbCrLf & _
"ErrNumber: " & Err.Number & vbCrLf & _
"Description: " & Err.Description & vbCrLf
Err.Clear
Resume UploadFile_Exit
End Function