laravelでユーザーが動画データを投稿し、他ユーザーとシェアできるアプリを開発中です。
大まかな処理はできたのですが、それをindexページやshowページで見るのに苦戦しています。
・状況
・・設定ファイルを書き換えて50MBのファイルまでアップロードできるようにした
・・POSTされたデータをstorage(storage/public)に保存
・・コントローラー内でstoreを使って保存(下記は投稿の一連の処理)。
・・データを管理するFilesテーブルでパスを保存
(mysql側でSQLを手打ち、storageディレクトリを見てランダムなファイル名にリネームされているのを確認)
public function upload(Request $request, $id) { $file = File::where('todo_id', $id)->first(); $file->file_path = $request->file('file')->store('public/videos'); $file->save(); return redirect('/todos/index')->with('flash_message', __('Uploaded.')); }
・・シンボリックリンクを作成
php artisan storage:link
ここまでやれば、あとは動画用のタグ「iframe」のsrc属性にパスを当てるだけ、と思い試して見たのですが、
「404|Not Found」が表示されてしまいました。
<iframe src="/storage/{{ $todo->file_path }}" frameborder="0"></iframe> // /storage/public/videos/RCUVRbCGTnPgSRIQGDXBhN7fh7pI7UmEAMGWLkHW.qt
デベロッパーツールで見たところ、パスとなる文字列は表示されていました(上記コードコメントアウトで書かれている箇所)。
試しに画像ファイルもアップロードしてみたのですが、同様の結果でした。
状態から見る限りifraneのsrcに当てるファイルの参照が通ってないということなのだと考えているのですが、
/storage/ + storeで保存したパス
という形式で入力していて間違いに思い当たりがありません。
追記:
アドバイスを元に、以下のようにパスを変えたところ、うまくいきました!
<iframe src="/storage/videos/{{ $todo->file_path }}" frameborder="0"></iframe> // storeで保存するパスを純粋にファイル名だけに変更 // /storage/ はstorage/app/publicへの参照
お手数をおかけしますが、アドバイスをいただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/30 14:38