Edited at

Laravel5.5でGoogleCloudStorageにファイルをアップロードする

『Laravel5.5をGoogle App Engineで動かす』にてGoogle App Engine(スタンダード環境)にLaravel5.5アプリケーションをデプロイする方法を紹介しました。

今回は、前回要確認事項としていたLaravelのファイルストレージ機能を(もちろんGoogle CloudStorageで!)利用する方法を確立したので紹介したいと思います。"laravel5.5"のタグを付けていますが、多分 5.6, 5.7 でも動くはず。


GaeSupportLaravelの導入・設定

まず前提として、GaeSupportLaravel を利用します。

ただし、利用するバージョンは"dev-php72-laravel55"です。詳細、基本的な設定等は『Laravel5.5をGoogle App Engineで動かす』をご覧ください。


環境変数

.envファイルにFILESYSTEM_DRIVER=gaeを追加します。


設定ファイル

設定ファイル(config/filesystems.php)に以下の設定を追加します。

'disks' => [

// 中略
'gae' => [
'driver' => 'gae',
'root' => 'gs://(YOUR_BUCKET_NAME)/storage/app/',
],

ソースコードのコメントを読む限り、rootの最後に"/"が必要っぽい。

もちろん、rootの値も環境変数で与えるのがより望ましいです。

        'root' => env('GCS_STORAGE_URI'),


実装


ビュー

<input type="file" name="image"/>

もちろん、<form>へのenctype="multipart/form-data"追加も必要です。


コントローラ

public function store(Request $request)

{
// 省略
$path = $request->file('image')->store('public');
\Log::info("Image uploaded:{$path}"); // ここも必須ではない
// 省略
}

ビュー、コントローラのサンプルは必要最小限の部分のみ。

storeだけでなく、updateにも同様のコードを追加することになるかと思います。


おまけ(画像プレビュー)

画像ファイルのアップロードであれば、最低でもアップロード前のプレビューくらいは欲しいものです。

『最速・最高のファイルアップロードに近づくための1歩#画像のプレビュー』が参考になったので紹介しておきます。