概要
PHPでConoHaのオブジェクトストレージにファイルをアップロードします。
API呼出にPUTメソッドを使用します。
URLにはコンテナ名に加えて、保存するオブジェクト名も指定する必要があります。
コンテナ名のみの場合はHTTPステータスが202 Acceptedとなり、アップロードできないようです。
アップロード関数
/**
* オブジェクトアップロード
*
* @param unknown $token
* @param unknown $file_path
* @param unknown $to_path
* @param unknown $options
*/
function upload($token, $file_path, $to_path, $options = null)
{
$url = API_OBJECT_STORAGE_SERVICE . $to_path;
$fs = filesize($file_path);
$fp = fopen($file_path, "r");
$headers = array(
"Accept: application/json",
"X-Auth-Token: {$token}"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_INFILESIZE, $fs);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res_json = curl_exec($ch);
$res_info = curl_getinfo($ch);
$res_errno = curl_errno($ch);
$res_error = curl_error($ch);
curl_close($ch);
if (CURLE_OK !== $res_errno) {
var_dump($res_info, $res_errno, $res_error);
exit();
}
$res_data = json_decode($res_json);
return $res_data;
}
利用方法
ローカルの"/tmp/test.jpg"を、オブジェクトストレージの"/container1/test.jpg"にアップロードする場合の例です。
アクセストークンを取得後、アップロード関数を呼び出します。
$file_path = "/tmp/test.jpg";
$to_path = "/container1/test.jpg";
// トークン取得
$tokens = getToken();
$token = $tokens->access->token->id;
// アップロード
upload($token, $file_path, $to_path);