使用上传会话的Dropbox错误

时间:2017-01-18 15:11:09

标签: vb.net dropbox dropbox-api

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

  

+ $ exception {" lookup_failed / closed /...&# 34;} 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

我得到了这个错误窗口

类型&#39; System.ObjectDisposedException&#39;的第一次机会异常。发生在System.dll

其他信息:无法访问已处置的对象。

1 个答案:

答案 0 :(得分:0)

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

UploadSessionStartAsyncUploadSessionAppendV2Async都会使用名为bool的{​​{1}}参数来关闭会话。

当您拨打这些会话时,您始终将其设置为close。在您完成上传数据之前,您不应该关闭会话。