不是将文件直接上传到服务器上的某个位置,而是将其保存到Session中,并在以后的某个条件下上传。
这是我的方法,目前将文件保存到我的服务器:
public function step3store() {
$file = Input::file('file');
$identifier = date("Ymd") . " - " . Session::get('lastName') . "_" . Session::get('firstName');
$destinationPath = base_path() . '/uploads/'. $identifier ;
$extension = $file->getClientOriginalExtension();
$filename = $identifier . " - " . uniqid() . "." . $extension;
$upload_success = Input::file('file')->move($destinationPath, $filename);
if( $upload_success ) {
return Response::json('success', 200);
} else {
return Response::json('error', 400);
}
}
而我正在考虑使用这样的东西:
Session::put([
'file' => Input::get('file'),
]);
但每当我检查我的会话时,在我上传文件后,我得到“文件”的值为“null”。
由于我每个Ajax上传多个文件,我不确定它是否会破坏我将文件放入Session的方式。
那么,如何将每个Ajax的多个文件保存到Laravel会话中?
提前致谢。
答案 0 :(得分:11)
会话仅适用于小的,微不足道的数据,而不是大量数据和图像等文件。
将图像存储在正常目录中,然后在用户完成表单时将其移动到另一个目录。有一个“垃圾收集”脚本定期运行,如果用户在一段时间后没有完成表单,则会清除第一个目录中的任何图像。
你的句子,“只有那时我才想使用真正的服务器资源”没有任何意义,就好像你要将文件保存到会话那样仍然使用你服务器的资源。会话被写入磁盘。如果您将文件作为BLOB存储到数据库中也是一样(不要这样做)。您仍在使用服务器的资源。因此,将文件保存到会话的理论不会停止使用服务器的资源。
答案 1 :(得分:5)
这是你应该怎么做的。在会话中存储整个图像不是一个好主意。会话cookie无法存储大数据。
将图像存储在服务器上。给图像一个id。并将该ID存储在会话中。