###要約
- controllerに
use Illuminate\Support\Facades\Storage;
を追記してstorageファサードを使えるようにする - storeAsの代わりに
Storage::disk('s3')->putFileAs('/', アップロードファイル, ファイル名, 'public'
を使って保存する - s3のユーザを追加する
- 追加したユーザのアクセスキーをHerokuのconfigに追加
- その他、
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION
AWS_BUCKET
AWS_URL
を追加していく。
###画像を保存するメソッドが変わる
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を変更する必要あり
<img src="s3のURL/{{ ファイル名 }}">
とすることで表示されるようになりました。
###基本はハッシュ化したファイル名でアップするのかな?
いくつか動画やサイトをみてみたけど、ストレージに保存する際のメソッドがほとんどpuFileだった。
それをデータベースとストレージに保存して表示されるね!みたいな説明だったので、よくわかりませんが、オリジナルのファイル名でやらない方がいいのかも。