前提
以下の記事を参考にAWSにアップロードするように実装します。
http://qiita.com/yamato/items/7b8aab6e1f3556e9aadb
今までAWSにアップロードしていたのですがふとGCSにアップロードをしてみたくなり、設定を変更します。
GCSにはAWSの互換APIが実装されているので、AWSへのアップロードの実装からほぼ変更なくGCSへアップロードが可能です。
GCS側の設定
Google Cloud PlatformのコンソールからStorageでバケットを作成しておきます。
(今回は仮にtestというバケットを作成したとします。なお、バケットはCloud Storageの中で固有である必要があるため他の人がすでに作っているバケットは作成できません。なので実際にはtestというバケットも作れないと思います。
その後設定->相互運用性から相互アクセスをONにして、相互運用ストレージアクセスキーを作成します。
これがAWSのACCESS_KEY,SECRET_KEYにあたります。
GCSの設定周りはこの記事が参考になります。
http://qiita.com/ngyuki/items/fd3bb47cd4aeb2f61fec
envの設定
上記記事のように実装した場合ACCESS_KEY,SECRET_KEYはenvに指定するようにしてあるので、envに指定します。
S3_ACCESS_KEY=your-GCS-key
S3_SECRET_KEY=your-GCS-secret
S3_BUCKET=your-bucket (今回はtest)
base_urlの設定
config/filesystems.phpのs3の設定にbase_urlを指定します。
なお、driverはs3のままで大丈夫です。
's3' => [
'driver' => 's3',
'key' => env('S3_ACCESS_KEY'),
'secret' => env('S3_SECRET_KEY'),
'region' => env('S3_REGION'),
'bucket' => env('S3_BUCKET'),
'base_url' => 'https://storage.googleapis.com'
],
・・・
],
GCSにアップロードする
Laravelのファイルシステム
にあるメソッドを使うことでGCSにアップロード/削除等ができます。
$disk = Storage::disk('s3');
// ファイルのアップロード
$disk->put('hoge.jpg', $contents);
// ファイルの取得
$contents = $disk->get('hoge.jpg');
// ファイルのコピー
$disk->copy('hoge.jpg', 'fuga.jpg');
// ファイルの削除
$disk->delete(['hoge.jpg', 'fuga.jpg']);
画像のURL
画像のURLは以下の2パターンあります。
1. https://storage.googleapis.com/{bucket名}/{ディレクトリ名}/{ファイル名}
2. https://{bucket名}.storage.googleapis.com/{ディレクトリ名}/{ファイル名}
(どちらともhttpでも使用可能です)
AWSのURLは
https://{bucket名}.s3.amazonaws.com/{ディレクトリ名}
の形式で、URLを使用してファイル名などを使用するメソッドを実装していた場合は、 2.のURLを使うといいでしょう。