2016-12-05 5 views
1

.NET 용 새로운 Dropbox SDK v2를 사용하고 있습니다.파일 업로드 Dropbox v2.0 API

보관 용 계정에 문서를 업로드하려고합니다.

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); 
     } 
    } 

이 코드 단편은 실제로 "테스트 중!"이라는 보관 용 계정에 test.txt 문서를 만듭니다. 콘텐츠인데 경로 (예 : "C : \ MyDocuments \ test.txt")을 업로드하고 싶습니다.

도움이 될 것입니다.

답변

4

UploadAsync 메서드는 업로드 한 파일 내용으로 body 매개 변수에 전달하는 모든 데이터를 사용합니다.

로컬 파일의 내용을 업로드하려면 해당 파일의 스트림을 제공해야합니다. 업로드 세션을 사용하여,

이 예제는 보관 용 계정에 파일을 업로드 할 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); 
       } 
      } 
     } 
    } 
}