Dropbox.NETを試す

DropboxAPIを使ってみようとふと思いました。公式のドキュメントを見てみるとDropbox.NETというライブラリがあったので、チュートリアルを参考にしながら試してみました。

.NET - Developers - Dropbox

準備

コンソールアプリプロジェクトを作って、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");

こんなところかなと。

ソース全体はこちらに。

Dropbox.NETを試す · GitHub