Open9

Dropbox APIを使いCurlでファイルをアップロードする

s_ryuukis_ryuuki

はじめに

Dropbox APIを使いCurlでファイルをアップロードする方法です。
今回使用する/uploadでは150MBまでアップロードできます。
今回は扱いませんが、/upload_session/start、/upload_session/append_v2、/upload_session/finishを使用して分割アップロードすることで大きなファイルがアップロードできるようです。

アクセスタイプ

DropboxAPIではApp folde、Full Dropboxの2つのアクセスモードがある。

App folde

  • 「アプリ」フォルダ以下にSettingsで設定した専用フォルダ以下にのみ書き込みができる
  • ファイル共有
    • メンバー追加が使用可能
    • 閲覧用リンクで「リンクを知る全ユーザー」が使用可能
    • 閲覧用リンクでの「招待されたユーザー」が使用可能
  • フォルダ共有
    • メンバー追加が不可
    • 閲覧用リンクで「リンクを知る全ユーザー」が使用可能
    • 閲覧用リンクでの「招待されたユーザー」が不可[1]

Full Dropbox

  • 個人フォルダ以下に書き込みができる
  • ファイル共有
    • メンバー追加が使用可能
    • 閲覧用リンクで「リンクを知る全ユーザー」が使用可能
    • 閲覧用リンクでの「招待されたユーザー」が使用可能
  • フォルダ共有
    • メンバー追加が使用可能
    • 閲覧用リンクで「リンクを知る全ユーザー」が使用可能
    • 閲覧用リンクでの「招待されたユーザー」が使用可能

参考資料

脚注
  1. Error (500)になる ↩︎

s_ryuukis_ryuuki

アプリケーション作成

developers/apps/create - Dropboxへアクセスする
アプリ作成を行う

  • Scoped accessを選択する
  • App folder or Full Dropboxを選択する[1]
  • App Nameをつける[2]
  • Create Appボタンを押す

脚注
  1. チーム向けの共有には追加で権限が必要? ↩︎

  2. DropBox全体でユニークな名前をつける必要がある。prefix、suffix、日付などつけると良いかも ↩︎

s_ryuukis_ryuuki

共通設定

Permissionsタブ→files.content.writeにチェックをいれる。

Submitを押す。

App folder

Settings→App folder nameを設定する。[1]
Changeボタンを押す。フォルダ名を書き換える。Saveボタンを押す。

脚注
  1. Dropbox全体でユニークな必要がある? ↩︎

s_ryuukis_ryuuki

App key、App secretの取得する

SettingsタブのApp key、App secret[1]をコピーする

脚注
  1. App secretはShowボタンを押すと表示できる ↩︎

s_ryuukis_ryuuki

AUTHORIZATION_CODEの取得

https://www.dropbox.com/oauth2/authorize?client_id=<App key>&token_access_type=offline&response_type=code

  • <App key>部分をApp key値に置き換える
  • 作成したURLをWebブラウザーへ入力してページを開く
  • 「このアプリをリンクをする前に」の「続行」ボタンを押す
  • 「に次の権限を与えます」の「許可」ボタンを押す
  • 「アクセスコードが生成されました」のアクセスコードをコピーする
s_ryuukis_ryuuki

refresh_tokenを得る

/oauth2/token HTTP - Developers - Dropboxを使用する

curl https://api.dropbox.com/oauth2/token \
-d code=<AUTHORIZATION_CODE> \
-d grant_type=authorization_code \
-d client_id=<APP_KEY> \
-d client_secret=<APP_SECRET>

<AUTHORIZATION_CODE>をAUTHORIZATION_CODEの取得した値に置き換える。
<APP_KEY>部分をApp key値にに置き換える。
<APP_SECRET>部分をApp secret値に置き換える。

置き換えたcurlコマンドを実行する

access_tokenとrefresh_tokenが得られる。
access_tokenは14400秒(4時間)しか使用できない。refresh_tokenを使うとcurlでaccess_tokenを生成できるようになる。

s_ryuukis_ryuuki

refresh_tokenを使いaccess_tokenを得る

/oauth2/token HTTP - Developers - Dropboxを使用する

curl https://api.dropbox.com/oauth2/token \
-d grant_type=refresh_token \
-d refresh_token=<REFRESH_TOKEN> \
-d client_id=<APP_KEY> \
-d client_secret=<APP_SECRET>

<REFRESH_TOKEN>を「refresh_tokenを得る」で取得したrefresh_tokenの値に置き換える。
<APP_KEY>部分をApp key値にに置き換える。
<APP_SECRET>部分をApp secret値に置き換える。

置き換えたcurlコマンドを実行する

access_tokenが得られる。
access_tokenは14400秒(4時間)しか使用できない。

s_ryuukis_ryuuki

ファイルをアップロードする

files-upload HTTP - Developers - Dropboxを使用する

curl -X POST https://content.dropboxapi.com/2/files/upload \
--header "Authorization: Bearer <get access token>" \
--header "Dropbox-API-Arg: {\"autorename\":false,\"mode\":\"add\",\"mute\":false,\"path\":\"/upload/upload.txt\",\"strict_conflict\":false}" \
--header "Content-Type: application/octet-stream" \
--data-binary @"/Users/username/Documents/upload.txt"

<get access token>を「refresh_tokenを使いaccess_tokenを得る」で取得したaccess_tokenの値に置き換える。
Dropbox-API-Argのpath「/upload/upload.txt」部分をアップロードしたいフォルダ+ファイル名を設定する。[1]
その他のDropbox-API-ArgはAPIドキュメントで確認してください。
--data-binaryの「/Users/username/Documents/upload.txt」部分アップロードしたいファイルパスにする。

置き換えたcurlコマンドを実行する

エラーになった場合はAPIリファレンスを確認してください。
ファイルがアップロードができたかをDropBoxを開き確認する。

脚注
  1. App foldeの場合は/アプリ/設定したフォルダ名/pathになる ↩︎

s_ryuukis_ryuuki

おまけ テスト用のaccess_tokenを取得する

Settingsタブ→OAuth 2→Generated access tokenのGenereteボタンを押す。

access_tokenが取得できる。Permissionsを変更すると使用できなくなる。再生成する必要がある。