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

时间:2013-07-18 20:21:20

标签: php symfony

我正在使用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不会自动删除它?

1 个答案:

答案 0 :(得分:0)

将文件名存储在网址中并不是一个好主意,这是一个安全风险。使用会话。

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

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