前回[Laravel11+LIVEWIRE #8]File Upload(ファイルアップロード)でファイルアップロードができるように変更した。
今回はアップロードファイルをAzureのストレージ(BLOB)へアップしてみたいと思う。
Azureの設定
ストレージアカウントを作成

以下、適当に入力して次へ。

「個々のコンテナで匿名アクセスの有効化を許可する」にチェックを入れると、アップロードしたファイルがインターネット上に公開されるので、システムの都合に応じてONにする。(後から変更可能)
「階層型名前空間を有効にする」はチェックONにしておかないとディレクトリ(フォルダ)が作成できない(と思う。未確認)。
ざっと入力して次へ

ざっと入力して次へ

次へ

次へ

次へ

次へ

最後、作成

デプロイが完了するとストレージアカウントが作成される。
ファイルアップロードに必要な情報はここにある。

ファイルはコンテナー単位にアップロードされるので、コンテナーの追加を行う。

コーディング
パッケージ調査
まずはパッケージをどうするか?調べた感じ2種類。
1つ目はMicrosoft謹製なので、PHP全般で使える。
2つ目は1つ目をラップしてLaravel流儀で使えるようにしている。それなら、2つ目を使うのがよさそうなのでやってみる。
インストール&設定
パッケージインストール
composer require matthewbdaly/laravel-azure-storage
config/filesystems.php
disksのところに追加
'azure' => [ // NB This need not be set to "azure", because it's just the name of the connection - feel free to call it what you want, or even set up multiple blobs with different names
'driver' => 'azure', // As this is the name of the driver, this MUST be set to "azure"
'name' => env('AZURE_STORAGE_NAME'),
'key' => env('AZURE_STORAGE_KEY'),
'container' => env('AZURE_STORAGE_CONTAINER'),
'url' => env('AZURE_STORAGE_URL'),
'prefix' => null,
'connection_string' => env('AZURE_STORAGE_CONNECTION_STRING') // optional, will override default endpoint builder
],
.env
AZURE_STORAGE_NAME=<ステレージアカウント名>
AZURE_STORAGE_KEY=<キー>
AZURE_STORAGE_CONTAINER=<コンテナ名>
AZURE_STORAGE_CONNECTION_STRING=<接続文字列>
実際の設定内容は、
AZURE_STORAGE_NAME=<ステレージアカウント名>
AZURE_STORAGE_KEY=<キー>
AZURE_STORAGE_CONTAINER=<コンテナ名>
または、
AZURE_STORAGE_CONTAINER=<コンテナ名>
AZURE_STORAGE_CONNECTION_STRING=<接続文字列>
のどちらかでOK
app/Livewire/Forms/Post/InputForm.php
storeメソッド、updateメソッドのファイル保存を以下のように変更
$filePath = Storage::disk('azure')->put('/photo', $this->photo);
ファイルパス($filePath)には「photo/Hfn21BLtsEkxXXXXXXXXXXKeVzHwUUZ4alTRIecph.jpg」のような値が返却される。
実行結果
実行してみるとコンテナーにファイルがアップされる。
Azureのストレージブラウザで確認するとこんな感じ。

URLの構成は以下ルール
https://<ストレージアカウント名>.blob.core.windows.net/<コンテナ名>/<ファイル名>
感想
すんなりアップロードできたのでびっくり。バイナリファイルはAWSのs3とかAzureのBLOBとか上げれるものはアップしたほうが負荷分散の観点からもいいのかもしれない。
コメント