下载包含多个文件的 ZIP 存档时出错

问题描述 投票:0回答:1

我在下载包含多个文件的 zip 存档时遇到问题。当我尝试打开下载的存档时,遇到错误。这是我生成文件路径的方法:

公共/文件/新闻/可下载/3C1FVuFx13iH4og3zjferjx8qhQj1js2RUqDOCXG.pdf

public function downloadAllCertificates(Request $request)
{
    try {
        $certificateIds = $request->input('certificate_ids');

        $zipFileName = 'all_certificates.zip';
        $zipFilePath = public_path($zipFileName);
        $zip = new \ZipArchive();
        $zip->open(public_path($zipFileName), \ZipArchive::CREATE | \ZipArchive::OVERWRITE);

        foreach ($certificateIds as $certificateId) {
            $certificate = UserCertificate::findOrFail($certificateId);
            $filePath = storage_path('app/' . $certificate->path);
            if (file_exists($filePath)) {
                $zip->addFile($filePath);
            } else {
                throw new \Exception("File not found for certificate ID: $certificateId");
            }
        }

        $zip->close();

        $zipSize = filesize($zipFilePath);

        return response()->download(public_path($zipFileName));
    } catch (Exception $e) {
        Log::error($e->getMessage());
        return response()->json(['error' => 'Failed to create zip file'], 500);
    }
}

我尝试过单独下载文件,效果很好。但是,当我将它们放入 zip 存档并尝试下载时出现错误。我怀疑我创建存档的方式存在问题。

此外,我使用 filesize() 函数检查了存档的大小,它返回了 265,530 字节。这是包含两个 PDF 文件的存档的标准大小吗?

任何有关可能导致此问题的原因的帮助或见解将不胜感激。

php laravel zip
1个回答
0
投票

我找到了解决办法。我需要将这些:ob_start()、ob_end_clean() 添加到我的代码中并且它起作用了。

© www.soinside.com 2019 - 2024. All rights reserved.