Dropbox.NETを試す
DropboxのAPIを使ってみようとふと思いました。公式のドキュメントを見てみるとDropbox.NETというライブラリがあったので、チュートリアルを参考にしながら試してみました。
準備
コンソールアプリプロジェクトを作って、NuGetでDropbox.Apiをインストールします。
Install-Package Dropbox.Api
NuGet Gallery | Dropbox.Api 4.7.0
Dropbox APIを使うために、App Consoleでアプリを登録して、OAuth2のアクセストークンを生成しておきます。(手順は省略。公式ドキュメントを見てください。)
https://www.dropbox.com/developers/apps
基本的な操作を試す
フォルダの追加・削除やファイルのアップロード・ダウンロードなど基本的な操作を試していきますが、まずはエントリポイントです。
// Program.cs class Program { static void Main(string[] args) { const string token = "ここにアクセストークン"; // アクセストークンを使ってDropboxクライアントを生成 using (var client = new DropboxClient(token)) { // Dropboxサンプルを実行 new DropboxSample(client).RunAsync().Wait(); } } } // DropboxSample.cs // Dropboxサンプル class DropboxSample { // Dropboxクライアント private readonly DropboxClient _client; public DropboxSample(DropboxClient client) { _client = client; } // サンプルを実行 public async Task<bool> RunAsync() { // todo: ここに以下のコードがある体で return true; } }
ここからのコードはDropboxSample.RunAsyncメソッドの中身です。コードの順番もそのままで実行できるはず。
フォルダを作成
// "/Temp/sample"フォルダを作成 await _client.Files.CreateFolderV2Async("/Temp/sample");
ファイルをアップロード
作成したフォルダにテキストファイルを2つアップロードします。streamはファイルの中身です。
// "text1.txt" using (var stream = new MemoryStream(Encoding.UTF8.GetBytes("file1 content"))) { await _client.Files.UploadAsync("/Temp/sample/text1.txt", body: stream); } // "text2.txt" using (var stream = new MemoryStream(Encoding.UTF8.GetBytes("file2 content"))) { await _client.Files.UploadAsync("/Temp/sample/text2.txt", body: stream); }
ファイル一覧を取得
ListFolderAsyncメソッドを使ってファイル一覧を取得します。結果のListFolderResult.HasMoreプロパティがtrueの場合は、ListFolderContinueAsyncメソッドを使ってファイル一覧の続きを取得します。
// ファイルの一覧を取得 // ListFolderContinueAsyncを試したいのでlimitを1にする var result = await _client.Files.ListFolderAsync("/Temp/sample", limit: 1); foreach (var entry in result.Entries) { Console.WriteLine(entry.Name); // text1.txt } while (result.HasMore) { result = await _client.Files.ListFolderContinueAsync(result.Cursor); foreach (var entry in result.Entries) { Console.WriteLine(entry.Name); // text2.txt } }
ファイルをダウンロード
// ファイルをダウンロード // "text1.txt" using (var response = await _client.Files.DownloadAsync("/Temp/sample/text1.txt")) { Console.WriteLine(await response.GetContentAsStringAsync()); // file1 content } // "text2.txt" using (var response = await _client.Files.DownloadAsync("/Temp/sample/text2.txt")) { Console.WriteLine(await response.GetContentAsStringAsync()); // file2 content }
ファイルを削除
// ファイルを削除 // "text1.txt" await _client.Files.DeleteV2Async("/Temp/sample/text1.txt"); // "text2.txt" await _client.Files.DeleteV2Async("/Temp/sample/text2.txt");
フォルダを削除
// "/Temp/sample"フォルダを削除 await _client.Files.DeleteV2Async("/Temp/sample");
こんなところかなと。
ソース全体はこちらに。