0

我正在使用 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_uploadmatch_csv时,服务器返回一个错误,指出该文件不再存在。

据我了解,一旦脚本执行停止,PHP 就会删除临时文件。因此,当我在 symfony2 中切换视图时,file_upload 方法停止并且文件被删除。

我的问题是/是:

是否有更好的替代方法可以跨视图共享上传的文件?

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

4

1 回答 1

0

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

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

  2. 然后,在您的第二种方法中,从会话中获取路径,进行解析,然后删除文件。而已。

于 2013-07-18T20:27:17.410 回答