2012-11-11 76 views
3

目前,我有以下功能:VB.net HTTP後,計數進度條異步發送的字節

Private Function uploadFile(ByVal fileName As String) 
    Dim data() As Byte = IO.File.ReadAllBytes(fileName) 
    Dim base64String = System.Convert.ToBase64String(data) 
    Dim uploadURL As String = "http://192.168.0.7/upload.php" 
    Try 
     Using client As New Net.WebClient 
      Dim reqParm As New Specialized.NameValueCollection 
      reqParm.Add("body", base64String) 
      Dim responsebytes = client.UploadValues(uploadURL, "POST", reqParm) 
      Dim responsebody = (New Text.UTF8Encoding).GetString(responsebytes) 
     End Using 
    Catch ex As System.Net.WebException 
     MsgBox(ex.Message) 
    Finally 
      ' 
    End Try 
End Function 

這將在HTTP請求爲Base64編碼字符串發送文件的內容。我想添加一個進度條,以便可以監視進度。對於Java,我可以通過遞增字節發送計數器來實現這一點,因爲我一次向請求的輸出流添加一個字節。我是否有與VB.net相同的選項,或者是另一種選擇?感謝您的任何想法

回答

1

您可以使用UploadValuesAsync並收聽事件處理程序UploadProgressChangedUploadValuesCompleted

示例代碼:

Private Sub UploadProgressChanged(ByVal sender As Object, ByVal e As Net.UploadProgressChangedEventArgs) 
    ' The progress is updated 
    ProgressBar1.Value = e.ProgressPercentage 
End Sub 

Private Sub UploadValuesCompleted(ByVal sender As Object, ByVal e As Net.UploadValuesCompletedEventArgs) 
    Dim responsebytes = e.Result 
    Dim responsebody = (New System.Text.UTF8Encoding).GetString(responsebytes) 
    ' Do whatever you want 
    MsgBox(responsebody) 
End Sub 

Private Function uploadFile(ByVal fileName As String) As Boolean 
    Dim data() As Byte = IO.File.ReadAllBytes(fileName) 
    Dim base64String = System.Convert.ToBase64String(data) 
    Dim uploadURL As String = "http://192.168.0.7/upload.php" 
    Try 
     Using client As New Net.WebClient 
      Dim reqParm As New Specialized.NameValueCollection 
      reqParm.Add("body", base64String) 
      AddHandler client.UploadProgressChanged, AddressOf UploadProgressChanged 
      AddHandler client.UploadValuesCompleted, AddressOf UploadValuesCompleted 
      client.UploadValuesAsync(New System.Uri(uploadURL), "POST", reqParm) 
     End Using 
    Catch ex As System.Net.WebException 
     MsgBox(ex.Message) 
    Finally 
     ' 
    End Try 
    Return True 
End Function 
+0

這完美的作品,非常感謝! – Hoofamon