如何在symfony2中跨视图共享文件


How to share file across views in symfony2

我正在使用symfony2构建一个多步骤文件上传。

第一个屏幕允许用户上传CSV文件。

第二个屏幕允许用户将数据库列映射到CSV列。

我的控制器中有两个方法,每个屏幕一个。

file_upload=>第一屏

match_csv=>第二屏幕

在file_upload方法中,我有以下代码:

 return $this->redirect($this->generateUrl('match_csv', 
                        array(
                               'accountId' => $accountId,
                               'projectId' => $projectId,
                               'file' => base64_encode( $file->getPathname() )
                              )
                         ), 301);

在我的match_csv方法中,我有以下代码:

    $file = base64_decode($file);
    $csvFile = new 'SplFileObject( $file );
    $csvFile->setFlags('SplFileObject::READ_CSV);

我的问题是:

当我将视图从file_upload切换到match_csv时,服务器会返回一个错误,指出该文件已不存在。

据我所知,PHP会在脚本执行停止后立即删除临时文件。因此,当我在symfony2中切换视图时,file_upload方法停止,文件被删除。

我的问题是:

是否有更好的选择来跨视图共享上传的文件?

自己写一个临时文件,然后在我停止使用后立即删除它,这样Symfony2/PHP就不会自动删除它,这是个好主意吗?

将文件名存储在url中不是一个好主意,这会带来安全风险。为此使用会话。

  1. 我会这样做:将文件上传到一个临时区域,然后将移动到的路径存储在会话中。

  2. 然后,在第二个方法中,从会话中获取路径,执行解析,然后删除该文件。就是这样。