LoginSignup
3
4

More than 5 years have passed since last update.

PHPでConoHaオブジェクトストレージにファイルをアップロードする

Posted at

概要

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);
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4