我在下载包含多个文件的 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 文件的存档的标准大小吗?
任何有关可能导致此问题的原因的帮助或见解将不胜感激。
我找到了解决办法。我需要将这些:ob_start()、ob_end_clean() 添加到我的代码中并且它起作用了。