我正在使用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不会自动删除它?
答案 0 :(得分:0)
将文件名存储在网址中并不是一个好主意,这是一个安全风险。使用会话。
我会这样做:将文件上传到临时区域 在会话中存储您将其移动到的路径。
然后,在第二种方法中,从会话中获取路径,执行 解析然后删除该文件。就是这样。