Dropbox for .NET Developersのチュートリアルに書いてあるコードはC#なので、
VB.netで書いてみました。
まずは、「Drobox SDKをVB.netで使う方法(準備)」に書いてあるプロジェクト「DropboxSDKTest」を作成し、フォームに以下のコントロールを追加します。
アクセストークンも取得しておいてください。
フォルダ内一覧表示Button
ダウンロードButton
アップロードButton
RichTextBox1
各ボタンをクリックしたときに「RichTextBox1」に結果が出力されます。
フォームのコードの一番上に次のコードを追加します。
Imports System.Text
Imports Dropbox.Api
Imports Dropbox.Api.Files
以下、ボタンの処理を1つづつ説明します。
アカウント情報を取得する
「アカウント情報取得Button」をクリックしたときのコードです。
1 2 3 4 5 6 7 8 |
Private Async Sub アカウント情報取得Button_Click(sender As Object, e As EventArgs) Handles アカウント情報取得Button.Click Dim strAccessTalken As String = "[アクセストークン]" Dim dbx = New DropboxClient(strAccessTalken) Dim full = Await Task.Run(Function() dbx.Users.GetCurrentAccountAsync()) RichTextBox1.Text = String.Format("{0} - {1}", full.Name.DisplayName, full.Email) End Sub |
非同期で実行する必要があるので「Private Async Sub」としてください。
RichTextBox1に名前とメールアドレスが表示されます。
非同期の処理の書き方を理解したい場合、「C#で非同期プログラミングをする方法: Thread,ThreadPoolからTask,async awaitまでを分かりやすく解説」というKindle本をおすすめします。
Kindle Unlimitedで無料です。
C#ですが、よく読めばわかります。
フォルダ内のファイル一覧を取得する
「フォルダ内一覧表示Button」をクリックしたときのコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Private Async Sub フォルダ内一覧表示Button_Click(sender As Object, e As EventArgs) Handles フォルダ内一覧表示Button.Click RichTextBox1.Text = "" Dim strAccessTalken As String = "[アクセストークン]" Dim dbx = New DropboxClient(strAccessTalken) Dim list = Await Task.Run(Function() dbx.Files.ListFolderAsync("")) For Each item In list.Entries.Where(Function(i) i.IsFolder) RichTextBox1.Text &= String.Format("D {0}" & vbCrLf, item.Name) Next For Each item In list.Entries.Where(Function(i) i.IsFile) RichTextBox1.Text &= String.Format("F{0,8} {1}" & vbCrLf, item.AsFile.Size, item.Name) Next End Sub |
例えば、ルートフォルダの中にある「A」というフォルダの中身を見たい場合は、
と変更します。
ただ、このListFolderAsyncには問題があり、確実にフォルダの内容全てが取得できるわけではないようです。
ファイルをダウンロードする
「ダウンロードButton」をクリックしたときのコードです。
1 2 3 4 5 6 7 8 9 10 11 12 |
Private Async Sub ダウンロードButton_Click(sender As Object, e As EventArgs) Handles ダウンロードButton.Click RichTextBox1.Text = "" Dim strAccessTalken As String = "[アクセストークン]" Dim folder As String = "/A" Dim file As String = "a.txt" Dim dbx = New DropboxClient(strAccessTalken) Dim response = Await Task.Run(Function() dbx.Files.DownloadAsync(folder + "/" + file)) RichTextBox1.Text = Await response.GetContentAsStringAsync() End Sub |
ドロップボックスのルートフォルダの中にある「A」というフォルダの中の「a.txt」をダウンロードします。
「RichTextBox1」には「a.txt」の中に書かれている文字が表示されます。
「a.txt」そのものは、どこかに保存されるわけではないので、保存したい場合はGetContentAsStringAsyncで取得した内容をファイル名を指定して保存するコードを書く必要があります。
ファイルをアップロードする
「アップロードButton」をクリックしたときのコードです。
1 2 3 4 5 6 7 8 9 10 11 12 |
Private Async Sub アップロードButton_Click(sender As Object, e As EventArgs) Handles アップロードButton.Click Dim strAccessTalken As String = "[アクセストークン]" Dim content As String = "Hello" Dim folder As String = "/A" Dim file As String = "a.txt" Dim mem = New MemoryStream(Encoding.UTF8.GetBytes(content)) Dim dbx = New DropboxClient(strAccessTalken) Dim updated = Await Task.Run(Function() dbx.Files.UploadAsync(folder + "/" + file, WriteMode.Overwrite.Instance, body:=mem)) RichTextBox1.Text &= String.Format("Saved {0}/{1} rev {2}", folder, file, updated.Rev) End Sub |