我在 Laravel 控制器中使用 ZipStream ( https://github.com/maennchen/ZipStream-PHP ) 来下载用户选择的文件集合。完成后,我需要发送成功消息,并重定向回原始页面。我现在得到的是一个成功的下载,但它只是挂在那里,永远不会点击消息和重定向代码。这是我所拥有的:
public function zip()
{
$files = File::find(request('files'));
$filepath = 'myfile.' . date('Y.m.d.h.i.s') . '.zip';
$count = 0;
$response = new StreamedResponse(function () use ($files, $filepath, &$count) {
$options = new Archive();
$options->setZeroHeader(true);
$options->setEnableZip64(false);
$zip = new ZipStream($filepath, $options);
foreach ($files as $file) {
$fileName = $file->name;
$content = file_get_contents($file->signedUrl());
$zip->addFile($fileName, $content);
$count++;
}
$zip->finish();
return true;
}, Response::HTTP_OK, [
'Content-Type' => 'application/octet-stream',
'Content-Disposition' => 'attachment; filename="' . $filepath . '"',
]);
flash($count . ' file(s) zipped and downloaded.');
return back();
}
(以上基于此处找到的代码:创建和下载 Zip 文件 (maennchen/ZipStream-PHP))
我试过返回$response
,它做同样的事情。
似乎StreamedResponse
应该在完成处理时通知您,但是如果您测试$response->isSuccessful()
or $response->isOk()
,您会立即得到真实的。