2013-04-26 193 views
0

我需要从Excel工作表中将一些数据发布到使用VBA的HTTP Web服务。 我正在使用MSXML2.XMLHTTPServer。如何跟踪上传进度以向用户提供反馈(例如进度条)?使用vba跟踪http发布进度

这里是我使用的代码:我解决了通过进行猜测,是服务器的响应将被命名为这一个大约一年前

Const STR_BOUNDARY As String = "3fbd04f5-b1ed-4060-99b9-fca7ff59c113" 

    '--- prepare body 
    PostData = "--" & STR_BOUNDARY & vbCrLf & _ 
     "Content-Disposition: form-data; name=""path""; filename=""" & fileName & """" & vbCrLf & _ 
     "Content-Type: application/octet-stream" & vbCrLf & vbCrLf & _ 
     PostData & vbCrLf & _ 
     "--" & STR_BOUNDARY & "--" 
    '--- post 
     objHTTP.Open "POST", Url, False 
     objHTTP.SetRequestHeader "Content-Type", "multipart/form-data; boundary=" & STR_BOUNDARY 
     objHTTP.Send pvToByteArray(PostData) 

    PostString = objHTTP.responseText 
+0

你有什么这么远吗? – Tim 2013-04-26 14:28:37

+0

请显示您的代码。 – 2013-04-26 19:32:09

+1

您可以使用OnReadyStateChange事件,但这并不容易。 http://stackoverflow.com/questions/11607677/how-to-vba-catch-request-timeout-error – 2013-04-26 20:20:26

回答

1

,“带的CreateObject(” Microsoft.XMLHTTP内“)”部分,我将“.ResponseText”作为总猜测传递给一个变量,并且在上传到Box.com时起作用!它在代码的最后一行下面这是摘自:http://wqweto.wordpress.com/2011/07/12/vb6-using-wininet-to-post-binary-file/

注意,bAsync变量必须设置为False

'--- read file 
nFile = FreeFile 
Open sFileName For Binary Access Read As nFile 
If LOF(nFile) > 0 Then 
    ReDim baBuffer(0 To LOF(nFile) - 1) As Byte 
    Get nFile, , baBuffer 
    sPostData = StrConv(baBuffer, vbUnicode) 
End If 
Close nFile 
'--- prepare body 
    sPostData = "--" & STR_BOUNDARY & vbCrLf & _ 
     "Content-Disposition: form-data; name=""uploadfile""; filename=""" & Mid$(sFileName, InStrRev(sFileName, "\") + 1) & """" & vbCrLf & _ 
     "Content-Type: application/octet-stream" & vbCrLf & vbCrLf & _ 
     sPostData & vbCrLf & _ 
     "--" & STR_BOUNDARY & "--" 
'--- post 
    Dim sResponseText As String 
    With CreateObject("Microsoft.XMLHTTP") 
     .Open "POST", sURL, bAsync 
     .SetRequestHeader "Content-Type", "multipart/form-data; boundary=" & STR_BOUNDARY 
     .Send pvToByteArray(sPostData) 
     sResponseText = .ResponseText 
    End With 
+0

如果bAsync设置为false,那么这并不意味着'.Send pvToByteArray(sPostData)'将会阻塞,直到收到整个响应为止。如何在收到回复的同时获得进展? – garbb 2017-11-21 17:54:20