我正在使用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中不是一个好主意,这会带来安全风险。为此使用会话。
-
我会这样做:将文件上传到一个临时区域,然后将移动到的路径存储在会话中。
-
然后,在第二个方法中,从会话中获取路径,执行解析,然后删除该文件。就是这样。