【问题标题】:Track http post progress with vba使用 vba 跟踪 http 发布进度
【发布时间】:2013-04-20 17:58:06
【问题描述】:

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

这是我使用的代码:

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

【问题讨论】:

  • 到目前为止你有什么收获?
  • 请出示您的代码。
  • 可以使用 OnReadyStateChange 事件,但这并不容易。 stackoverflow.com/questions/11607677/…
  • @user2324106:如果您向我们展示您的代码,我们可以帮助您改进它
  • @DickKusleika 谢谢你的链接。我如何知道已经发布了多少数据(以显示进度条)?

标签: http vba post excel progress


【解决方案1】:

大约一年前,我通过猜测服务器响应的名称来解决这个问题,在“With 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

【讨论】:

  • 如果 bAsync 设置为 false 那么这是否意味着 .Send pvToByteArray(sPostData) 将阻塞直到收到整个响应?收到响应时如何获得进度?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 2012-12-09
  • 2017-07-03
相关资源
最近更新 更多