【C#】DropboxのAPIを利用してファイルを入出力する

Dropboxの提供しているAPIを利用することで、ファイルのアップロードやダウンロードなどをプログラムから行うことができます。日常の作業や業務の効率化に活用することが期待できます。

今回はC#でAPIを利用して、ファイルの入出力操作などを試してみたいと思います。APIを利用するために必要な設定方法なども記載します。

【検証環境】
Dropbox Basic(無料プラン)
.NET 5.0 / コンソールアプリケーション

DropBox側の設定

当たり前ですが、まずアカウントを準備する必要があります。

Basicプランであれば、2GBのクラウドストレージを無料で利用することができます。登録は下記リンクから行えます。

Dropbox Basic(無料アカウント)

アプリの作成

APIを利用するために、Dropbox側でアプリケーション登録を行う必要があります。

まずDropboxにログインして
https://www.dropbox.com/developers/apps/create にアクセスします。

下記の画面で、「Create app」をクリックします。

こちらでは3つの設定項目があります。

1.Choose an API
ひとつしかないので、表示されている「Scoped access」を選択します。

2.Choose the type of access you need
今回は「Full Dropbox」を選択します。こちらはDropboxのすべてのファイルとフォルダにアクセスするための設定です。

3.Name your app
アプリの名前を入力します。すでに他の人に使用されているものは使えないため、簡単な名前だと重複する可能性がありますのでご注意ください。

すべて入力して、「Create app」をクリックすると下記の画面に遷移します。

Access Token の生成

Access Token はAPIにアクセスするためのキーになります。これは他人に知られないように管理しましょう。

Settingsタブ内の画面中部にある OAuth 2 > Generated access token > Generate を押下します。

すると、下記のようにAccess Tokenが生成されます(赤線で隠しています)

これは後程C#のコードで利用するため、メモ帳などにコピペしておいてください。

Permissions の設定

Permissionsタブでは各種の権限を設定します。デフォルトではファイルの入出力が許可されていませんので、許可するように下記画像の通りチェックを入れ、「Submit」をクリックして登録します。

以上でDropbox側の設定は完了です。

C#側の設定、コーディング

Dropbox.NET SDK をインストール

DropBoxには、Dropbox.NETというSDKが用意されています。非常に楽にコーディングができるため、利用してみます。

.NET – Developers – Dropbox

SDKの用意されているプログラミング言語一覧

まず、パッケージマネージャからインストールを行います。

PM> Install-Package Dropbox.Api

C#でAPIを利用してみる

フォルダを作成する

フォルダ「/TestFolder」をルートフォルダに作成します。

using Dropbox.Api;
using System.Threading.Tasks;

namespace DropBoxAccess
{
    class Program
    {
        static async Task Main(string[] args)
        {
            //アクセストークン
            var accessToken = 【ACCESS TOKEN】;
            //アクセストークンを渡して、クライアントを生成
            using (var client = new DropboxClient(accessToken))
            {
                //作成フォルダ
                var folder = "/TestFolder";
                //フォルダ作成
                await client.Files.CreateFolderV2Async(folder);               
            }
        }
    }
}

上記のコードを実行すると、フォルダ「TestFolder」が作成されたことが確認できました。

※混同しそうですが、APIに渡すパス情報で階層を表現するときは、「」ではなく「/」を使います。

ファイルのアップロード

「D:sample.txt」 を フォルダ「/TestFolder」に「UploadTest.txt」 とリネームしてアップロードします。

using Dropbox.Api;
using System.Threading.Tasks;
using System.IO;

namespace DropBoxAccess
{
    class Program
    {
        static async Task Main(string[] args)
        {
            //アクセストークン
            var accessToken =【ACCESS TOKEN】;
            //アクセストークンを渡して、クライアントを生成
            using (var client = new DropboxClient(accessToken))
            {
                //アップロードフォルダ
                var saveFolderName = "/TestFolder/";

                //アップロードファイル名
                var saveFileName = "UploadTest.txt";

                //アップロードファイルパス
                var uploadSource = @"D:sample.txt";

                //ファイルのアップロード
                using (var stream = new MemoryStream(File.ReadAllBytes(uploadSource)))
                {
                    //ストリームに変換して、bodyに渡す
                    await client.Files.UploadAsync(saveFolderName + saveFileName, body: stream);
                }
            }
        }
    }
}

上記のコードを実行すると、ファイルがリネームされてアップロードされたことが確認できました。

ファイルのダウンロード

フォルダ「/TestFolder」の「UploadTest.txt」 を「Download.txt」としてダウンロードします。

using Dropbox.Api;
using System.IO;
using System.Threading.Tasks;

namespace DropBoxAccess
{
    class Program
    {
        static async Task Main(string[] args)
        {
            //アクセストークン
            var accessToken =【ACCESS TOKEN】;
            //アクセストークンを渡して、クライアントを生成
            using (var client = new DropboxClient(accessToken))
            {
                //ダウンロード元ファイルパス
                var downLoadPath = "/TestFolder/UploadTest.txt";

                //ダウンロード先ファイルパス
                var savePath = @"D:DownloadTest.txt";

                //DownloadAsyncはドロップボックス内のファイルを
                //IDownloadResponse<FileMetadata>で受け取ります。
                var response = await client.Files.DownloadAsync(downLoadPath);
                
                //これだけでは保存されませんので、保存先を指定して、
                //テキストファイルとして保存する処理を記述する必要があります。
                var content = await response.GetContentAsStringAsync();
                
                using (var streamWriter = File.CreateText(savePath))
                {
                    streamWriter.WriteLine(content);
                }
            }
        }
    }
}

上記のコードを実行すると、ファイルのダウンロードができたことが確認できました。

※コメントにも記載していますが、DownloadAsync メソッドはファイル自体を保存するわけではありませんので、保存処理は別途記述する必要があります。

他にも様々な操作が可能なようですが、そもそもDropboxの機能をあまり把握できていないため基本的な操作のみ記載しました。

ドキュメントはこちらにあるため、気になる方は深堀してみてください。

Leave a Reply

Your email address will not be published. Required fields are marked *