Laravel:将上传的文件保存到会话中

Posted

技术标签:

【中文标题】Laravel:将上传的文件保存到会话中【英文标题】:Laravel: Save uploaded file into Session 【发布时间】:2015-04-22 01:10:40 【问题描述】:

与其将文件直接上传并移动到服务器上的某个位置,我宁愿将其保存到 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 Session 中?

提前致谢。

【问题讨论】:

你为什么要那样做?将文件存储在会话中根本不是一个好习惯,为什么不将它们存储在临时文件夹中并每天执行一次 cron 工作以将其清除?这样您就可以将临时位置存储在会话中而不是文件 因为我使用多步形式。在第 3 步中,用户上传图像。在第 4 步中,他支付了费用,然后我才想使用真实的服务器资源并将它们保存在服务器上实际对应于“订单”的实际文件 【参考方案1】:

会话仅用于小而琐碎的数据,而不是大数据和图像等文件。

像正常一样将图像存储在一个目录中,然后如果用户完成表单,则将它们移动到另一个目录。有一个定期运行的“垃圾收集”脚本,如果用户在一段时间后没有完成表单,它会清除第一个目录中的所有图像。

您的句子“只有这样我才想使用真正的服务器资源”没有意义,就好像您要将文件保存到会话然后仍然使用您的服务器资源。会话被写入磁盘。如果您要将文件作为 BLOB 存储到数据库中,也是如此(也不要这样做)。您仍在使用服务器的资源。因此,将文件保存到会话的理论不会停止使用服务器的资源。

【讨论】:

花了一个小时寻找答案。所以这就是为什么当我将它转储到刀片文件中时它没有显示的原因。非常感谢你的伙伴!【参考方案2】:

你应该这样做。在会话中存储整个图像不是一个好主意。会话 cookie 不能存储大数据。

将图像存储在服务器上。给图片一个id。并将该 ID 存储在会话中。

【讨论】:

我会这样做的。您的回答同样正确,非常感谢。

以上是关于Laravel:将上传的文件保存到会话中的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.6,使多页注册并将输入数据保存到会话

Laravel 文档多次上传未保存到数据库

Laravel - 将文件上传到数据库

无法将 HttpPostedFileBase 保存到会话变量并使用两次

使用带有codeigniter的google api将google登录用户数据存储到会话中

Laravel 5:下载文件不显示弹出保存