ファイルアップロード編
以前、PHP curlでDropboxからファイル情報を取得する記事を書きましたが、今度はアップロード編です。
例によってDropbox API Explorerでパラメータなどを確認していきます。
ファイル情報取得とは異なり、ヘッダにDropbox-API-Arg
をもたせる必要があると。
使うのは以下です。
ファイルデータを渡す書き方に迷いましたが、以下を参考にさせてもらいました。
PHPのcURLを使用してDropboxを活用する方法
fread
でPOSTしてやる形です。
【追記】アクセストークン取得・ネームスペースID取得については、前回の記事をご覧ください。
ファイルアップロード.php
/**
* $filepath アップロードするファイルのパス
* $folder Dropbox上のアップロード先フォルダ名
*/
function uploadFile($filepath, $folder)
{
$url = "https://content.dropboxapi.com/2/files/upload";
$ch = curl_init();
$basename = basename($filepath);
$headers = array(
'Authorization: Bearer ' . $this->access_token, //取得したアクセストークン
'Dropbox-API-Path-Root: {".tag": "root", "root": "' . $this->root_namespace_id . '"}', //チームフォルダへアクセスする場合
'Content-Type: application/octet-stream',
'Dropbox-API-Arg: {"path":"/' . $folder . '/' . $basename . '", "mode":{".tag":"overwrite"}}', //上書きモード
);
$fp = fopen($filepath, "rb");
$size = filesize($filepath);
$options = array(
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => fread($fp, $size),
CURLOPT_RETURNTRANSFER => true,
);
curl_setopt_array($ch, $options);
$res = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (!curl_errno($ch) && $http_code == "200") {
print_r("SUCCESS: File Uploaded." . PHP_EOL);
} else {
print_r("ERROR: Failed to access DropBox via API" . PHP_EOL);
print_r(curl_error($ch) . PHP_EOL);
}
fclose($fp);
curl_close($ch);
}