背景
私はphpのlaravelというフレームワークを使っています。
あるツールを作っている時、データベースにファイルデータを入れる前に画面遷移がありました。その時アップロードファイルをどのように保持すればいいか、苦労したので共有したいと思います。
ファイル保持の仕方
まずはrequestで送られてきたファイルデータを関数を使って読み込む。
$file = $request['file_data']
$fileData = file_get_contents($file->getRealPath())
$fileName = $file->getClientOriginalName();
これらをsessionを使ってブラウザに記憶させる。
名前空間でsessionを宣言する。
use Session;
以下のようにしてsessionに記憶させる
Session::put('file_data', $fileData]);
Session::put('file_name', $fileName);
これでsessionに記憶することができました!
ファイル取得の仕方
以下のようにして取得する
$fileData = Session::get('file_data');
$fileName = Session::get('file_name');
これらをデータベースに挿入すれば画面遷移があってもアップロードファイルを保持することができます!
苦労した点
sessionではなく、viewのinputで送ろうとしたが、input typeのfileはあくまでアップロード機能であり、valueを使うことはできません。
またsessitonにファイルデータをそのまま入れようとした場合、シリアライズ可能でないオブジェクトをキャッシュすることはできないそうです。
シリアライズというのは.....ぐぐってみると
『ソフトウェア内部で扱っているデータをそのまま、保存したり送受信することができるように変換することです。』
と記載されていました。
sessionにもキャッシュできるものできないものがあるのですね。とてもいい勉強になりました。