目次
はじめに
先日は、「Google Cloud Storage にPHPを使ってファイルをアップロードする」という記事を書きました。
アップロードするのはこれで問題無いと思います。
次はバケット内にディレクトリを作成し、そこにファイルをアップロードしたいと思います。
設定
今回は、「foo/bar」というディレクトリ構造に「img.png」を設置します。
以下サンプルソース
<?php
require __DIR__ . '/vendor/autoload.php';
use Google\Cloud\Storage\StorageClient;
// プロジェクトIDを入力
$projectId = 'hoge-23rfwe4';
// 認証鍵までのディレクトリを入力
$auth_key = './iam/kabanoki-bf1cc-f7706c743b95.json';
// バケットの名前を入力
$bucket_name = 'kabanoki';
// アップロードファイル名を入力
$file_name = 'img.png';
// アップロードファイルまでのディレクトリパスを入力
$path = 'file/';
// バケット内に作成したいディレクトリを指定する
$dir = 'foo/bar/';
$storage = new StorageClient([
'projectId' => $projectId,
'keyFile' => json_decode(file_get_contents($auth_key, TRUE), true)
]);
$bucket = $storage->bucket($bucket_name);
$options = [
'name' => $dir.$file_name
];
$object = $bucket->upload(
fopen("{$path}{$file_name}", 'r'),
$options
);
echo "[{$path}{$file_name}]を[{$dir}{$file_name}]にアップロード完了";
簡単なソースなので、すぐに分かると思いますが、 $bucket->upload()に設定するoptionにファイル名を指定するパラメーターがあります。
そこにディレクトリも合わせて設定すると、バケット内にディレクトリ構造に格納されたファイルがアップロードされます。
確認
さて上記のシステムを走らせて、ブラウザに「[file/img.png]を[foo/bar/img.png]にアップロード完了」と表示されたら完了です。

バケット内を確認してみると・・・

「foo/bar」に「img.png」がアップロードされてます!
いかがでしょか?
今日はこの辺でー