2016-12-05 20 views
1

私は新しいDropbox SDK v2 for .NETを使用しています。ファイルのアップロードDropbox v2.0 API

私は、Dropboxアカウントに文書をアップロードしようとしています。

public async Task UploadDoc() 
    { 
     using (var dbx = new DropboxClient("XXXXXXXXXX")) 
     { 
      var full = await dbx.Users.GetCurrentAccountAsync(); 
      await Upload(dbx, @"/MyApp/test", "test.txt","Testing!"); 
     } 
    } 
async Task Upload(DropboxClient dbx, string folder, string file, string content) 
    { 
     using (var mem = new MemoryStream(Encoding.UTF8.GetBytes(content))) 
     { 
      var updated = await dbx.Files.UploadAsync(
       folder + "/" + file, 
       WriteMode.Overwrite.Instance, 
       body: mem); 

      Console.WriteLine("Saved {0}/{1} rev {2}", folder, file, updated.Rev); 
     } 
    } 

このコードスニペットは、実際には、 "テスト中"のDropboxアカウントにtest.txtドキュメントを作成します。コンテンツはのパス(例: "C:\ MyDocuments \ test.txt")をアップロードしたいのですか?

ご協力いただければ幸いです。

答えて

4

UploadAsyncメソッドは、アップロードしたファイルのコンテンツとしてbodyパラメータに渡すデータを使用します。

ローカルファイルの内容をアップロードする場合は、そのファイルのストリームを与える必要があります。

の例では、(大きなファイルを処理するためのロジックを含む)、ローカルファイルをアップロードするには、このメソッドを使用する方法を示しているここにあります:

この例では、アップロードセッションを使用して、DropboxのアカウントにファイルをアップロードするDropbox .NET libraryを使用しています大きいファイルの場合:

private async Task Upload(string localPath, string remotePath) 
{ 
    const int ChunkSize = 4096 * 1024; 
    using (var fileStream = File.Open(localPath, FileMode.Open)) 
    { 
     if (fileStream.Length <= ChunkSize) 
     { 
      await this.client.Files.UploadAsync(remotePath, body: fileStream); 
     } 
     else 
     { 
      await this.ChunkUpload(remotePath, fileStream, (int)ChunkSize); 
     } 
    } 
} 

private async Task ChunkUpload(String path, FileStream stream, int chunkSize) 
{ 
    ulong numChunks = (ulong)Math.Ceiling((double)stream.Length/chunkSize); 
    byte[] buffer = new byte[chunkSize]; 
    string sessionId = null; 
    for (ulong idx = 0; idx < numChunks; idx++) 
    { 
     var byteRead = stream.Read(buffer, 0, chunkSize); 

     using (var memStream = new MemoryStream(buffer, 0, byteRead)) 
     { 
      if (idx == 0) 
      { 
       var result = await this.client.Files.UploadSessionStartAsync(false, memStream); 
       sessionId = result.SessionId; 
      } 
      else 
      { 
       var cursor = new UploadSessionCursor(sessionId, (ulong)chunkSize * idx); 

       if (idx == numChunks - 1) 
       { 
        FileMetadata fileMetadata = await this.client.Files.UploadSessionFinishAsync(cursor, new CommitInfo(path), memStream); 
        Console.WriteLine (fileMetadata.PathDisplay); 
       } 
       else 
       { 
        await this.client.Files.UploadSessionAppendV2Async(cursor, false, memStream); 
       } 
      } 
     } 
    } 
} 
関連する問題