LoginSignup
2
2

More than 3 years have passed since last update.

【Heroku】にデプロイした【Laravel】の外部ストレージをS3に設定する

Posted at

要約

  1. controllerにuse Illuminate\Support\Facades\Storage;を追記してstorageファサードを使えるようにする
  2. storeAsの代わりにStorage::disk('s3')->putFileAs('/', アップロードファイル, ファイル名, 'public'を使って保存する
  3. s3のユーザを追加する
  4. 追加したユーザのアクセスキーをHerokuのconfigに追加
  5. その他、 AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION AWS_BUCKET AWS_URL を追加していく。

画像を保存するメソッドが変わる

controller.php
use Illuminate\Support\Facades\Storage; // 追記

ローカルではstorageディレクトリに画像を保存していたが、Herokuにデプロイする時点で保存できないので、外部ストレージを使う必要がある。

とりあえずAWSのs3ストレージを使うことに。それに伴いいくつか設定しないといけない。

(S3でバケットをすでに作成している前提です。)
https://www.youtube.com/watch?v=nMDIVQsESBY&t=2s
バケット作成の参考にした動画↑

S3ストレージ上でアカウントのプルダウンメニューでマイセキュリティ資格情報というところからユーザの追加ができます。

手順にしたがっていくとアクセスキーなどが表示されるので、それをHerokuのconfigに追加していく。

ターミナル
$ heroku config:add AWS_ACCESS_KEY_ID=キー

という感じで追加していく。ちょっと面倒。
herokuのサイト上でも入力できます。

データベースに保存しているのが画像のパスじゃなくてファイル名だとimgのsrcを変更する必要あり

view.blade.php
<img src="s3のURL/{{ ファイル名 }}">

とすることで表示されるようになりました。

基本はハッシュ化したファイル名でアップするのかな?

いくつか動画やサイトをみてみたけど、ストレージに保存する際のメソッドがほとんどpuFileだった。

それをデータベースとストレージに保存して表示されるね!みたいな説明だったので、よくわかりませんが、オリジナルのファイル名でやらない方がいいのかも。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2