Dropbox APIを使いCurlでファイルをアップロードする
はじめに
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
- 個人フォルダ以下に書き込みができる
- ファイル共有
- メンバー追加が使用可能
- 閲覧用リンクで「リンクを知る全ユーザー」が使用可能
- 閲覧用リンクでの「招待されたユーザー」が使用可能
- フォルダ共有
- メンバー追加が使用可能
- 閲覧用リンクで「リンクを知る全ユーザー」が使用可能
- 閲覧用リンクでの「招待されたユーザー」が使用可能
参考資料
-
Error (500)になる ↩︎
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ブラウザーへ入力してページを開く
- 「このアプリをリンクをする前に」の「続行」ボタンを押す
- 「に次の権限を与えます」の「許可」ボタンを押す
- 「アクセスコードが生成されました」のアクセスコードをコピーする
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を生成できるようになる。
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時間)しか使用できない。
ファイルをアップロードする
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を開き確認する。
-
App foldeの場合は/アプリ/設定したフォルダ名/pathになる ↩︎
おまけ テスト用のaccess_tokenを取得する
Settingsタブ→OAuth 2→Generated access tokenのGenereteボタンを押す。
access_tokenが取得できる。Permissionsを変更すると使用できなくなる。再生成する必要がある。