試したことがないのですが、私も気になったので調べてみました。
2つ方法がありそうです。
見当外れだったらすみません。
オブジェクトストレージをマウントする方法
オブジェクトストレージをマウントすれば、既存のPHPコードをほぼそのままで使えるようになるのではないでしょうか。
現在、さくらインターネットのクラウドのオブジェクトストレージを検討しています。
さくらインターネット株式会社の公式サイトも、オブジェクトストレージにアクセスするための、サードパーティー製のツールを紹介しています。
よくある質問(オブジェクトストレージ) の 「ツールのサポートはどのようになっていますか?」
■さくらインターネット株式会社が運営する情報サイトで、具体的な方法が書いてありました。
S3QLでさくらのオブジェクトストレージサービスをローカルマウントしてみよう - さくらのナレッジ
ここではパーミッションについて説明されていませんが、--allow-other
オプションを付けてマウントすればアクセスできるようになります。説明のコードにはそのオプションが書かれていたので問題はありませんが……。念のため。
Mounting - S3QL 2.21 documentation
■こちらはQiitaの記事ですが、s3fsを使うやり方です。
さくらのクラウドのオブジェクトストレージをs3fsでマウントする
さくらのクラウドでオブジェクトストレージをマウントする
こちらもパーミッションでは少し悩むかもしれません。だいぶ前の話ですが、パーミッションに引っかかっていた方がいらっしゃいました。
s3fsを使ってEC2からS3をマウントしたときにうまくいかなくて調べた事まとめ
PUTリクエストを送信する方法
クライアントからCakePHP3にファイルをアップロードするときの一時ファイルを、PUTリクエストによりオブジェクトストレージにアップロードすればいいと思います。
さくらインターネットサービス情報/企業情報の検索結果 → [pdf] オブジェクトストレージ API リファレンス
CakePHP3でPUTリクエストを送る場合は、 guzzlehttp/guzzle が便利です。
https://github.com/guzzle/guzzle
インストールもComposerで一発ですし、書き方も簡単です。
ただもしかしたらPUTリクエストに必要なヘッダーの準備で少し悩むかもしれません。
リクエストが通るかどうか自信はありませんが、guzzlehttp/guzzle は次のような感じで使います。
PHP
1use GuzzleHttp\Client;
2
3$base_uri = 'http://example.com'; // APIアクセスのベースURI
4$host = 'test.example.com'; // My_Bucket_Name.b.sakurastorage.jp
5$file_path = '/path/to/tmp/image'; // アップロードした一時ファイルのパス
6$upload_path = '/path/to/image'; // ファイルの保存先
7
8$client = new Client([
9 'base_uri' => $base_uri,
10]);
11
12$f = fopen($file_path, "r");
13$response = $client->put($upload_path,
14 [
15 'body' => $f,
16 // 不要なヘッダーがあるとさくらのAPI側がエラーを返す
17 'headers' => [
18 'Host' => $host,
19 'Date' => gmdate ( \DateTime::RFC2822 ),
20 'Authorization' => 'user_name:token',
21 'User-Agent' => '', // さくらのAPI側で無視してくれるらしい
22 'Expect' => '', // 不要な項目なので空欄にして消す?(不明)
23
24 ]
25 ]
26);
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/13 12:13
2017/05/13 12:36
2017/05/13 14:37
2017/05/13 14:40
2017/05/13 21:31