簡體   English   中英

C#Dropbox RestSharp下載文件以流式傳輸

[英]c# Dropbox RestSharp download file to stream

我有一個“ ASP.NET”控制台應用程序,並且為Dropbox使用了“ RestSharp”客戶端。

我使用此代碼下載文件:

 var baseUrl = "https://content.dropboxapi.com";

 var client = new RestClient(baseUrl);
 client.Authenticator = OAuth1Authenticator.ForRequestToken(mc_apiKey, mc_appsecret);

 RestRequest request = new RestRequest(string.Format("/{0}/files/auto", mc_version), Method.GET);

 client.Authenticator = OAuth1Authenticator.ForProtectedResource(mc_apiKey, mc_appsecret, accessToken.Token, accessToken.Secret);
 request.AddParameter("path", path);

 var responseAccount = client.Execute(request);
 var fileString = responseAccount.Content;
 byte[] b1 = System.Text.Encoding.UTF8.GetBytes (fileString);

當調用client.Execute(request) ,整個文件都加載到內存中,因此當我在Dropbox中有一個非常大的文件時,程序將崩潰。

我需要不使用client.DownloadData(request).SaveAs(path)來流式傳輸文件以下載到本地存儲。

我需要能夠分批傳輸文件。

您可以這樣設置request.ResponseWriter:

  var baseUrl = "https://content.dropboxapi.com";

  var client = new RestClient(baseUrl);
  client.Authenticator = OAuth1Authenticator.ForRequestToken(mc_apiKey,mc_appsecret);

  RestRequest request = new RestRequest(string.Format("/{0}/files/auto", mc_version), Method.GET);

  client.Authenticator = OAuth1Authenticator.ForProtectedResource(mc_apiKey, mc_appsecret, accessToken.Token, accessToken.Secret);
  request.AddParameter("path", path);

  string tempFile = Path.GetTempFileName();
  using(var stream = File.Create(tempFile, 1024, FileOptions.DeleteOnClose ))
  {
    request.ResponseWriter = (responseStream) => responseStream.CopyTo(stream);
    var response = client.DownloadData(request);
  }

您可以在這里的文檔中看到示例

我在鏈接中找到了最佳答案:

 string url = String.Format("https://content.dropboxapi.com/1/files/auto{0}?oauth_consumer_key={1}&oauth_token={2}&oauth_signature={3}%26{4}", path, app-key, access-token, app-secret, access-token-secret);
 HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
 webRequest.Method = "Get";
 WebResponse webResponse = null;
  try
  {
     webResponse = webRequest.GetResponse();
     return webResponse.GetResponseStream();
  }
  catch (Exception ex)
  {
    throw ex;       
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM