繁体   English   中英

我需要在 Laravel 中创建 .Zip 文件,但我的代码不起作用

[英]I need to create .Zip file in Laravel and my code does not work

这是我第一次在 StackOverflow 上发帖。 我需要创建一个包含多个图像的 zip 文件。 我已经尝试过 Zipper 和 ZipArchive,但我的代码仍然失败。

$zip = new \ZipArchive();
foreach ($students as $student) {
    $download = 'album' . $student->album_id . '.zip';
    if ($zip->open(public_path('albums/' . $student->album_id . '/' . $download), \ZipArchive::CREATE) === TRUE) {
        $files = Storage::allFiles('public/albums/' . $student->album_id . '/image_files');
        foreach ($files as $file) {
            $zip->addFile($file);
        }
        $zip->close();
    }
}

我可以保证所有图像都存在。 我将图像放在Storage/app/public/albums/$student->album_id/image_files/ 请帮我。

首先,您可以添加一个额外的步骤来使用 PHP 内置函数来验证您的文件是否存在: file_exists()

大多数情况下,如果您的文件不存在,则不会将任何文件添加到zip 中,并且您的代码将运行而不会引发任何错误,但仍然无法运行。

您传递给 addFile() 的不是正确的路径。 addFile() 需要存储文件的绝对路径。 您需要添加这一行$file_path = storage_path("app/{$file}");

见下面的代码:

$zip = new \ZipArchive();
foreach ($students as $student) {
    $download = 'album' . $student->album_id . '.zip';
    if ($zip->open(public_path('albums/' . $student->album_id . '/' . $download), \ZipArchive::CREATE) === TRUE) {
        $files = Storage::allFiles('public/albums/' . $student->album_id . '/image_files');
        
        foreach ($files as $file) {
            $file_path = storage_path("app/{$file}");
            if (file_exists($file_path)) {
                $zip->addFile($filepath);
            }
        }
        $zip->close();
    }
}

或者,如果您希望下载任何压缩文件,您可以在代码末尾返回下载响应以进行下载:

return response()->download(public_path('albums/' . $student->album_id . '/' . $download));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM