Symfony1 Symfony批处理操作
我正在尝试创建一个批处理操作(symfony admin),它支持创建/动态下载包含用户照片的zip文件,这些照片可以在uploads/images目录中找到 以下是我已经实现的代码:Symfony1 Symfony批处理操作,symfony1,batch-file,zip,Symfony1,Batch File,Zip,我正在尝试创建一个批处理操作(symfony admin),它支持创建/动态下载包含用户照片的zip文件,这些照片可以在uploads/images目录中找到 以下是我已经实现的代码: public function executeBatchDownloadFotos(sfWebRequest $request) { $zip = new ZipArchive(); // atheletes identifiers $ids = $req
public function executeBatchDownloadFotos(sfWebRequest $request)
{
$zip = new ZipArchive();
// atheletes identifiers
$ids = $request->getParameter('ids');
// get all the atheletes objects
$q = Doctrine_Query::create()
->from('Atleta a')
->whereIn('a.id', $ids);
foreach ($q->execute() as $atleta)
{
$zip->addFile($atleta->id . '_' . $atleta->Clube . '.jpg', 'uploads/atletas/' . $atleta->id . '_' . $atleta->Clube . '.jpg');
}
}
另一方面,以下是视图配置:
BatchDownloadFotos:
http_metas:
content-type: application/zip
has_layout: false
由于某些原因,每次执行批处理操作时,浏览器都不会提示我使用窗口下载zip文件。在控制器文件中创建zip存档后,应将内容发送到浏览器 您可以使用此处描述的方法执行此操作: 现在您正在尝试创建ZIP文件,但没有将其发送到浏览器。应该使用setContent()和setHttpHeader()方法 您的操作可能如下所示(您应该添加错误处理):
你好!我应该在setHttpHeader()方法中放置什么?谢谢你的帮助!顺致敬意,您应该设置HTTP头的名称和值:。因此,在您的情况下,它应该是“内容类型”和“应用程序/zip”。您还应该设置“内容处置”标题:您好!在运行代码时,我注意到test.zip文件不是在/tmp/目录中创建的。你知道为什么会出现这个问题吗?谢谢你的帮助,祝你好运!检查是否已加载zip扩展名。您可以运行'php-m'命令或使用phpinfo()函数。
public function executeIndex(sfWebRequest $request)
{
$fileName = '/tmp/test.zip';
$zip = new ZipArchive();
$zip->open($fileName, ZipArchive::CREATE);
// add some files to archive
$zip->addFile('/tmp/test', 'test.txt');
$zip->close();
$this->getResponse()->setContent(file_get_contents($fileName));
$this->getResponse()->setHttpHeader('Content-Type', 'application/zip');
$this->getResponse()->setHttpHeader('Content-Disposition',
'attachment; filename=download.zip');
return sfView::NONE;
}