在Laravel中下载多个上传的文件

时间:2019-02-28 09:43:33

标签: php laravel

我有一个表单输入,可以上传多个文件。因此,所有文件路径都以字符串数组形式保存在数据库中。以下是我要下载文件的控制器。我想知道如何展示每个要在刀片视图中下载的文件。因此,我可以一次下载一个文件。我的控制器在下面。仅在下载单个文件时有效。我收到此错误Invalid argument supplied for foreach()

public function download($id) {
        $deal = Deal::findorFail($id);
        $files = $deal->uploads;
        foreach ($files as $file) {
            return Storage::download($file);
        }
    }

1 个答案:

答案 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"]
    );