質問: お世話になっております。 現在メルカリのような仕組みの会員制サービスを作成中です。 最初から懸念していた部分だったんですが、複数画像のアップロードのフローに悩んでいます。 あまり関係ないかもしれませんが環境は以下になります。 AWSでサーバー構築(EC2,RDS,S3) Mysql8.0 php7.3 Laravel5.8 Apache2.4 新規会員登録したユーザーが、自分の商品情報を登録するんですが、メルカリのように10枚まで画像をアップロードできる仕様です。 その他商品名や商品情報などのテキスト情報も同時に登録します。 複数画像アップロード部分はdropzone.jsを使用しました。 UIを考慮して確認ページは挟まず登録ページ→完了ページの作りを想定しています。 今悩んでいるのが、画像の一時保存先についてです。 例えば登録ページで複数の画像をドロップし、submitボタンをクリックするとします。 「商品名」などを空でsubmitすれば当然バリデーションに引っかかり元のページに戻ります。 このタイミングで一時保存の画像は消えるため、一旦退避用のフォルダに保存する必要があるのかなと思います。 バリデーションに引っかかった後、一旦退避したフォルダの画像を描画しつつ再度画像の削除を行ったり追加したり、 商品名などもしっかり入力しsubmitしたら情報の登録が行われ、退避していた画像たちは、登録後のlast_idで「/user_id/last_id」のような形でフォルダを作り、画像のリサイズ・コピーして「一旦退避したフォルダ」はそのタイミングで削除する。 というような仕様を考えています。 この「一旦退避したフォルダ」をどういうルールで作るのかが悩んでしまっています。 登録後であればidが取れるんですが、登録前にバリデーションで戻された状態でもドロップした画像をなんとか維持したい場合の一番良い方法がわかりません。 仮に一時的に作ったフォルダ内に退避用の画像を置いたまま、ユーザーが登録をやめてしまったらそのフォルダは永遠残ることになってしまいますし、仮にセッション名などでフォルダを作ったとしてもセッション切れたらフォルダを見つけられなくなるとか、、 同時に複数のユーザーが使うことを想定すると重複しない退避場所にする必要がありますし、答えに行き着かなくてぐるぐるしております。 今の段階で私が考える仕様以外での実装方法や、複数画像アップロードがある登録処理のベターな方法など、何かしら情報をいただけないでしょうか? 分かりづらい説明になってしまっていますがご教授のほどよろしくお願いいたします。
回答: 自己解決というところまでは行っていませんが私がやりたい形にかなり近い記事がありましたので、もう少し自分なりに考察してみたいと思います。 https://laraveldaily.com/multiple-file-upload-with-dropzone-js-and-laravel-medialibrary-package/ みっともない質問をしてしまい申し訳ありませんでした。