2016-12-05 11 views
1

Я использую новый Dropbox SDK v2 для .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); 
     } 
    } 

Этот фрагмент кода фактически создает документ test.txt в учетной записи Dropbox с помощью «Тестирования!». но я хочу загрузить документ с указанным способом (например: «C: \ MyDocuments \ test.txt»), возможно ли это?

Любая помощь будет очень оценена.

ответ

4

Метод UploadAsync будет использовать любые данные, которые вы передаете параметру body в качестве загруженного содержимого файла.

Если вы хотите загрузить содержимое локального файла, вам необходимо предоставить ему поток для этого файла.

Там пример здесь, который показывает, как использовать этот метод, чтобы загрузить локальный файл (включая логику для обработки больших файлов):

Этот пример использует Dropbox .NET library, чтобы загрузить файл в учетную запись Dropbox, с помощью сеансов закачивать для более крупных файлов:

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

 Смежные вопросы

  • Нет связанных вопросов^_^