使用上传会话的 Dropbox 错误

Dropbox error using upload session

这是关于 uploadsession soo 的修改代码,在小文件时它工作得很好,但是当我尝试像 5mb 这样的大文件时。不断出现以下错误:

+$exception {"lookup_failed/closed/..."} System.Exception {Dropbox.Api.ApiException}

Private Async Sub UploadToolStripMenuItem2_Click(sender As Object, e As EventArgs) Handles UploadToolStripMenuItem2.Click
    Dim C As New OpenFileDialog
    C.Title = "Choose File"
    C.Filter = "All Files (*.*)|*.*"
    If C.ShowDialog = Windows.Forms.DialogResult.OK Then
        Dim fileinfos = Path.GetFileName(C.FileName)
        Dim filetempat = Path.GetFullPath(C.FileName)
        Dim tempat As String = direktori.Text & "/" & fileinfos
        Await Upload(filetempat, tempat)

    End If
End Sub
Async Function Upload(localPath As String, remotePath As String) As Task
    Const ChunkSize As Integer = 4096 * 1024
    Using fileStream = File.Open(localPath, FileMode.Open)
        If fileStream.Length <= ChunkSize Then
            Await A.Files.UploadAsync(remotePath, body:=fileStream)
        Else
            Await Me.ChunkUpload(remotePath, fileStream, ChunkSize)
        End If
    End Using
End Function

Private Async Function ChunkUpload(path As [String], stream As FileStream, chunkSize As Integer) As Task
    Dim numChunks As Integer = CInt(Math.Ceiling(CDbl(stream.Length) / chunkSize))
    Dim buffer As Byte() = New Byte(chunkSize - 1) {}
    Dim sessionId As String = Nothing
    For idx As Integer = 0 To numChunks - 1
        Dim byteRead = stream.Read(buffer, 0, chunkSize)

        Using memStream = New MemoryStream(buffer, 0, byteRead)
            If idx = 0 Then
                Dim result = Await A.Files.UploadSessionStartAsync(True, memStream)
                sessionId = result.SessionId
                kondisi.Text=byteRead
            Else
                Dim cursor = New UploadSessionCursor(sessionId, CULng(CUInt(chunkSize) * CUInt(idx)))

                If idx = numChunks - 1 Then
                    Dim fileMetadata As FileMetadata = Await A.Files.UploadSessionFinishAsync(cursor, New CommitInfo(path), memStream)
                    MessageBox.Show("Upload Complete")
                    Console.WriteLine(fileMetadata.PathDisplay)
                Else
                    Await A.Files.UploadSessionAppendV2Async(cursor, True, memStream)
                    MessageBox.Show("Upload Failed")
                End If
            End If
        End Using
    Next
End Function

好的,现在它已修复,但是当我回到家并在家里尝试此代码时,我遇到了错误,此方法是否受到互联网连接速度较慢的影响?因为我的校园网速不错。

这是错误信息

+$exception {"Cannot access a disposed object.\r\nObject name: 'System.Net.Sockets.Socket'."}   System.Exception {System.ObjectDisposedException}
    this    Cannot obtain value of local or argument '<this>' as it is not available at this instruction pointer, possibly because it has been optimized away.  System.Net.Sockets.Socket

    asyncResult Cannot obtain value of local or argument 'asyncResult' as it is not available at this instruction pointer, possibly because it has been optimized away. System.IAsyncResult

    errorCode   Cannot obtain value of local or argument 'errorCode' as it is not available at this instruction pointer, possibly because it has been optimized away.   System.Net.Sockets.SocketError

这个错误window我得到了

'System.ObjectDisposedException' 类型的第一次机会异常发生在 System.dll

附加信息:无法访问已释放的对象。

Closed 错误表明您无法继续上传到上传会话,因为它已经关闭。

UploadSessionStartAsync and UploadSessionAppendV2Async 都带有一个名为 closebool 参数,它会关闭会话。

您总是在调用它们时将其设置为 True,关闭会话。在您完成为它上传数据之前,您不应该关闭会话。