【问题标题】:laravel download response downloads multiples folderslaravel 下载响应下载多个文件夹
【发布时间】:2021-01-06 06:58:13
【问题描述】:

我想制作 zip 并只下载 1 个文件夹,但 laravel 将该目录中每个文件夹中的每个文件添加到 zip 文件然后下载它

这是我的代码:

 $license = license::findOrFail($id);
    $path = public_path() . '/Qr/subs/' . $license->system_code;

    $zip = new ZipArchive;
    $fileName = 'photos.zip';
    if ($zip->open(public_path($fileName), ZipArchive::CREATE) === TRUE) {
        $files = File::files(public_path("/Qr/subs/{$license->system_code}/"));

        foreach ($files as $key => $value) {
            $relativeNameInZipFile = basename($value);
            $zip->addFile($value, $relativeNameInZipFile);
        }
        $zip->close();
    }
    return response()->download(public_path($fileName));

这就是我的目录的样子:

问题是我从 db 获取许可证并获取文件夹中的所有文件(文件夹以许可证 system_code 命名)并将其添加到 zip 文件并下载它,但 Laravel 将每个文件添加到 Qr/ 中的每个文件夹中订阅到 zip 文件,然后下载它

我做错了什么???

【问题讨论】:

  • 为什么不在 foreach 中使用 getRelativePath() :) foreach (File::files(..) as $file) { $file->getRelativePath() .. } File::文件正在返回对象数组,不确定 basename() 如何使用它
  • 你的意思是这个? : foreach (File::files(public_path("/Qr/subs/{$license->system_code}/")) as $file) { $relativeNameInZipFile = $file->getRelativePath(); $zip->addFile($file, $relativeNameInZipFile); }
  • 再次它正在下载其他文件@Svetoslav
  • ZipArchive 结构 for addFile ($filename, $localname = null,..) 所以要小心你为文件名设置的内容我认为替换相对名称和完整本地路径的 2 个值更合乎逻辑

标签: laravel


【解决方案1】:

解决了!

我应该先删除最后一个 zip 文件,然后再新建一个。

因为 laravel 将文件添加到现有的 zip 文件中

所以用这一行File::delete(public_path('Qrs.zip')); 我在函数的第一行删除它,然后构建一个新的

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 2020-03-12
    • 2016-08-09
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多