0

我在 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(),您会立即得到真实的。

4

0 回答 0