2016-11-09 61 views
0

我使用以下代碼將文件上傳到Dropbox。Dropbox.Api無法上傳大文件

我使用的NuGet包Dropbox.Api並獲得異常System.Threading.Tasks.TaskCanceledException(「任務被取消了。」)

從這個SO Question這似乎是一個超時問題。

那麼如何修改下面的代碼來設置超時時間。

public async Task<FileMetadata> UploadFileToDropBox(string fileToUpload, string folder) 
    { 
     DropboxClient client = new DropboxClient(GetAccessToken()); 

     using (var mem = new MemoryStream(File.ReadAllBytes(fileToUpload))) 
     { 
      string filename = Path.GetFileName(fileToUpload); 

      try 
      { 
       string megapath = GetFullFolderPath(folder); 
       string megapathWithFile = Path.Combine(megapath, Path.GetFileName(Path.GetFileName(filename))).Replace("\\", "/"); 
       var updated = client.Files.UploadAsync(megapathWithFile, WriteMode.Overwrite.Instance, body: mem); 
       await updated; 
       return updated.Result; 
      } 
      catch (Exception ex) 
      { 
       return null; 
      } 
     } 
    } 

回答

5

嘗試這樣創建和初始化客戶端:

var config = new DropboxClientConfig(); 
config.HttpClient.Timeout = new TimeSpan(hr, min, sec); // choose values 
var client = DropboxClient(GetAccessToken(), config); 

參考:
http://dropbox.github.io/dropbox-sdk-dotnet/html/M_Dropbox_Api_DropboxClient__ctor_1.htm

+2

喜彼得,謝謝。它的工作。我必須添加以下行作爲第二行config.HttpClient = new System.Net.Http.HttpClient();因爲HttpClient obj爲null。 – VivekDev

+0

Dropbox API的任何部分是否提供了構造新HttpClient的工廠方法?我遇到了與@VivekDev相同的問題,但我不確定調用新的HttpClient()是否缺少Dropbox API在內部創建對象時可能會調用的其他一些配置步驟。 – Jono

+0

@Jono沒有工廠方法,如果你不會配置提供Web客戶端,默認的將被使用https://github.com/dropbox/dropbox-sdk-dotnet/blob/28233d643ddc65660c565d2c23bed46cdd6af84a/Dropbox.Api/DropboxRequestHandler.cs#L57 –