【发布时间】: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