2011-12-29 13 views
1

DevBoxのOAuthライブラリを使用してDropbox REST Webサービスにファイルをアップロードしようとしています。Devdefined OAuthライブラリを使用してDropboxにファイルをアップロード

これは私が使用している方法である:

public static void UploadFile(string filenameIn, string directoryIn, byte[] dataIn) 
    { 
     DropBox.session.Request().Put().ForUrl("https://api-content.dropbox.com/1/files_put/" + directoryIn + filenameIn) 
      .WithQueryParameters(new { param = dataIn }); 
    } 

の方法は何かをするように見える、また任意の例外をスローしません。出力にもエラーはありません。ブレークポイントを使ってコードを呼び出していることを確認しようとしました。

答えて

3

エラーが表示されない理由は、リクエストが実行されていないためです。レスポンスを取得する必要があるリクエストを実行するには、これを行う方法がいくつもありますが、最も簡単な方法はフェッチすることですReadBody()メソッドを使用してテキストを返します。

ファイルのコンテンツをアップロードすることはクエリパラメータとして行うことはできません。ドロップボックスREST APIのように、プットリクエストの本文全体がファイルのコンテンツである必要があります。このため基本的に

すべてのあなたがする必要があります動作するように:

  • は、私はあなたが不足していると思われ、あなたのURLでAPIごとにルート・パス「のDropbox」や「サンドボックス」を含めます。 DropBoxアプリケーションがアプリケーションフォルダで設定されている場合は、「サンドボックス」を使用します。
  • コンシューマコンテキストで "UseHeaderForOAuthParameters"をtrueに設定すると、フォームのパラメータとしてエンコードされるのではなく、OAuthシグネチャなどが要求ヘッダーとして渡されます(ボディ全体が生データであるため)。
  • "WithRawContent(byte [] contents)"メソッドを使用して、ファイルの内容を要求に追加します。
  • PUTリクエストメソッドチェーンの最後に「ReadBody()」メソッドを使用して、要求を実行させます。

結果は次のようになりますJSONを含む文字列になります。

{ 
    "revision": 5, 
    "rev": "5054d8c6e", 
    "thumb_exists": true, 
    "bytes": 5478, 
    "modified": "Thu, 29 Dec 2011 10:42:05 +0000", 
    "path": "/img_fa06e557-6736-435c-b539-c1586a589565.png", 
    "is_dir": false, 
    "icon": "page_white_picture", 
    "root": "app_folder", 
    "mime_type": "image/png", 
    "size": "5.3KB" 
} 

私がGET行う方法を示していgithubの上DevDefined.OAuth-例のプロジェクトに例を追加しました

https://github.com/bittercoder/DevDefined.OAuth-Examples/blob/master/src/ExampleDropBoxUpload/Program.cs

をそしてここで、具体的PUTリクエストのために必要なコードは次のとおりです:とDropboxのにPUTリクエスト

var consumerContext = new OAuthConsumerContext 
{ 
    SignatureMethod = SignatureMethod.HmacSha1, 
    ConsumerKey = "key goes here", 
    ConsumerSecret = "secret goes here", 
    UseHeaderForOAuthParameters = true 
}; 

var session = new OAuthSession(consumerContext, "https://api.dropbox.com/1/oauth/request_token", 
    "https://www.dropbox.com/1/oauth/authorize", 
    "https://api.dropbox.com/1/oauth/access_token"); 

IToken requestToken = session.GetRequestToken(); 

string authorisationUrl = session.GetUserAuthorizationUrlForToken(requestToken); 

Console.WriteLine("Authorization Url: {0}", authorisationUrl); 

// ... Authorize request... and then... 

session.ExchangeRequestTokenForAccessToken(requestToken); 

string putUrl = "https://api-content.dropbox.com/1/files_put/sandbox/some-image.png"; 

byte[] contents = File.ReadAllBytes("some-image.png"); 

IConsumerRequest putRequest = session.Request().Put().ForUrl(putUrl).WithRawContent(contents); 

string putInfo = putRequest.ReadBody(); 

Console.WriteLine("Put response: {0}", putInfo); 

少し物事をクリアする必要がありますうまくいけばが、残念ながらドキュメントなしでそれだけでソースコードを見て、これらの事を理解するために少しトリッキーです:)

+0

ありがとうはそんなに、これは私の問題を修正! –

+0

問題ありません、喜んで助けてください – Bittercoder

関連する問題