laravel5.1で、複数ファイルをアップロードしてダウンロードするやり方を調べてみた(日本語ファイル名対応済)

laravel5.1で、複数ファイルをアップロードしてダウンロードするやり方を調べてみた(日本語ファイル名対応済)

写真やPDFなど、複数のフィールドに複数のファイルを格納したい!という仕様なので、調べてみた(今回はPDFオンリー)


1, テーブルのカラムは、ファイル名をセミコロン区切りで入れるから、ただのテキストにする

2, 新規作成画面と更新画面を作る。超大切&よく忘れるのは、form属性に’enctype’=>’multipart/form-data’を指定しないと、複数ファイルを送信してもlaravel側で認識できないから超注意だ!!!

普通の入力フォームの項目と違うのは、要素名の後ろに[]をつけて配列型にする。属性に’multiple’=>trueを追加して、複数ファイルアップロード許可する。

3, 更新画面を表示する処理

4, $file_links[](アップロード済みファイル)を表示すメインの処理は、Modelクラス(User.php)に記述する。

5, 更新ボタンを押された時の処理。まずはUserController.phpで処理を受け付ける(更新の場合)

6, メインの処理は、Modelクラス(User.php)に記述する。削除用チェックボックスにチェックがあったら削除。ファイルが送られてきたら/public/upload/user/{$id}/file1/フォルダに保存される。

7, 新規作成も更新とほとんど同じだが、INSERTするまで$idが確定しないので、INSERT->UPDATEという順番になる。

8, ファイル名をクリックされた時の処理を作る。英数字ファイル名なら

で楽なのだが、
a, 日本語ファイル名のままリンクを貼るとエラーになるのでNG!
b, URLエンコードすると表示されるが、ダウンロード時にURLエンコードされたままなのでダメ!
c, HTTPレスポンスヘッダにファイル名を入れれば良いらしい。
d, つまりルーティングが必要。

route.php

UserContoroller.php

参考URL: Laravel 5.1におけるdownloadアクションの日本語ファイル名対応