附加的批量下载

由于项目的需求,要对图片和附件实现批量压缩下载,经过几个小时的研究,调试终于搞出来了,代码实现,大神可以绕过,不要绕过了可以根据我的逻辑,写出自己的代码。。。直接贴代码。

public function download()
{
    $user = \Auth::user();
    //验证字段
    $request = array_filter($this->request->input());
    array_walk($request, function (&$value, $key) {
        if (is_array($value)) {
            $value = array_filter($value);
        }
    });

    $validator = \Validator::make($request, [
        'attachment_ids' => 'required|array|min:1',
    ]);

    if ($validator->fails()) {
        return $this->errorBadRequest($validator->messages()->all());
    }

    $attachmentIds = $this->request->get('attachment_ids');

    $attachments = Attachment::whereIn('id', $attachmentIds)->get();

    if (!$attachments->count()) {
        return $this->response->errorNotFound();
    }

    if ($attachments->count() == 1) {
        $attachment = $attachments->first();

        if (!$attachment->allowDownload($user)) {
            return $this->response->errorForbidden();
        }

        return response()->download(public_path($attachment->relative_path));
    } else {
        $zip = new \ZipArchive();
        $zipFile = storage_path('app/cache/' . date('Ymdhis') . uniqid() . '.zip');

        $zip->open($zipFile, \ZIPARCHIVE::CREATE);

        foreach ($attachments as $attachment) {
            if (!$attachment->allowDownload($user)) {
                continue;
            }

            $filename = basename($attachment->relative_path);

            $zip->addFile($attachment->relative_path, $filename);
        }
        $zip->close();

        return response()->download($zipFile);
    }
}

 
相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!