我有一个表单输入,可以上传多个文件。因此,所有文件路径都以字符串数组形式保存在数据库中。以下是我要下载文件的控制器。我想知道如何展示每个要在刀片视图中下载的文件。因此,我可以一次下载一个文件。我的控制器在下面。仅在下载单个文件时有效。我收到此错误Invalid argument supplied for foreach()
。
public function download($id) {
$deal = Deal::findorFail($id);
$files = $deal->uploads;
foreach ($files as $file) {
return Storage::download($file);
}
}
答案 0 :(得分:1)
txtView.textContainer.maximumNumberOfLines = 2
当您返回第一个文件时,它将中断foreach循环。因此,您必须一起返回所有文件。唯一的方法是创建一个包含所有文件的zip文件。
为此,您可以使用chumper/zipper软件包
public function download($id) {
$deal = Deal::findorFail($id);
$files = $deal->uploads;
foreach ($files as $file) {
return Storage::download($file);
--------^^^^^^-------------------------
}
}
更新
向Deal模型添加访问器以获取文件作为数组
交易模型
$zipper = Zipper::make(public_path('/documents/deals.zip'));
foreach ($files as $file) {
$zipper->add(public_path($file)); // update it by your path
}
$zipper->close();
return response()
->download(
public_path('/temporary_files/' . "deals.zip"),
"deals.zip",
["Content-Type" => "application/zip"]
);