Tp5 封装好的 文件上传

分为单文件上传和多文件上传

 

封装类:

class ImgUpload extends Base
{

    /**
     * 单文件上传,返回文件路径
     *
     * @param $request
     * @param $param       //请求参数名 image
     * @param $catalog     //数据表目录名 uploads/img/
     * @param $complete    //是否返回完整路径
     */
    public function upload($request,$param,$catalog,$complete = null)
    {
        $file = $this->request->file($param);          //获取表单数据
        if (!$file || !($file->getInfo()))          //不为空且为文件类型
            return $this->arrays(false, '', '', '上传错误!');

        try {
            $info = $file->validate([            //限制条件
                //"size" => 1024000,
                "ext" => 'jpg,gif,png,bmp,jpeg'
            ])->move($catalog);                 //保存路径

            if(!$info)
                $this->create('',$file->getError(),400)->send();

            if($complete)
                $url = App::config('domain').'/'.$catalog.$info->getSaveName();
            else
                $url = $info->getSaveName();

            return $url;
        }catch (Exception $e){
             $this->create('',$e->getMessage(),400)->send();
        }
    }

    /**
     * 单文件上传,返回文件路径
     *
     * @param $request
     * @param $param       //请求参数名 images
     * @param $catalog     //数据表目录名 uploads/img/
     * @param $complete    //是否返回完整路径
     */
    public function uploads($request,$param,$catalog,$complete = null)
    {
        $files = $request->file($param);          //获取表单数据
        if (!(is_array($files)) || !(count($files))) //需要数组而且不为空
            return $this->arrays(false, '', '', '上传错误!');

        try {
            foreach ($files as $k => $file){
          //唯一文件名
                $name = date('Ymd') . '/' . md5(microtime(true).$file->getInfo()['name']);
                $info = $file->validate([            //限制条件
                    //"size" => 1024000,
                    "ext" => 'jpg,gif,png,bmp,jpeg'
                ])->move($catalog,$name);   //保存路径

                if(!$info)
                    return $this->create('',$file->getError(),400);

                if($complete){
                    $data[$k] = App:config('domain').'/'.$catalog.$info->getSaveName();
                }else{
                    $data[$k] = $info->getSaveName();
                }
            }
            return $data;
        }catch (Exception $e){
            return $this->create('',$e->getMessage(),400);
        }
    }
}

 

测试类:

public function uploads()
    {
        $url = (new ImgUpload)->uploads($this->request, 'images', $this->catalog);   //获得新封面
        return $url;
    }

 

注意,多文件上传的参数后面需要加 [ ]

 

posted @ 2021-06-18 11:45  jaychou、  阅读(195)  评论(0)    收藏  举报