编程爱好者之家

laravel实现批量压缩下载

2018-07-26 19:39:18 408

laravel对图片和附件实现批量压缩下载,代码如下

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);
    }
}


同类文章