2017-01-18 8 views
0

これは、アップロードセッションのsooに関する修正されたコードです。小さいサイズのファイルでは魅力的ですが、5メガバイトのような大きなファイルを試してみると効果的です。次のエラーが現れておいてください。アップロードセッションを使用したDropboxエラー

+ $例外{ "lookup_failed /クローズ/ ..."} {の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 

私はタイプ「System.ObjectDisposedException」の

最初のチャンス例外がSystem.dllの

で発生しました追加情報だ、このエラー・ウィンドウです:アクセスできません。配置されたオブジェクト。

答えて

0

このClosedエラーは、既に閉じられているためアップロードセッションへのアップロードを続行できないことを示します。

UploadSessionStartAsyncUploadSessionAppendV2Asyncの両方とも、boolというパラメータを使用して、closeというセッションを閉じます。

あなたはそれらを呼び出すときにセッションを閉じるときに常にTrueに設定します。セッションのデータのアップロードが完了するまで、セッションを閉じるべきではありません。

+0

今、私は家に帰ったときにこのエロルに直面しています。私のキャンパスでこのプロジェクトをやっている時、あなたのコードは仕事ですが、今はそうではありません。 –

+0

['UploadSessionCursor'](https://dropbox.github.io/dropbox-sdk-dotnet/html/P_Dropbox_Api_Files_UploadSessionCursor_Offset.htm)はアップロードされた金額を記録します。 – Greg

+0

新しい問題が発生している場合は、詳細が記載された新しい投稿を開きます。 – Greg

関連する問題