【PHP】ThinkPHP6 公共 上传到本地的方法 附带使用方法

小破孩
2022-06-23 / 0 评论 / 101 阅读 / 正在检测是否收录...
    <?php
    
    
    namespace app\common\lib\files;
    
    use think\Exception;
    use think\exception\ValidateException;
    
    class upload
    {
        private $domain;
        protected $name;
        protected $type;
        protected $module;
        protected $image;
    
        public function __construct($name = '',$type = 'image',$image = [])
        {
            $this->name = $name;
            $this->type = $this->checkUpload($type);
            $this->module = request()->app_name();
            $this->image = $image;
            $this->domain = Request()->domain();
        }
        protected $config = [
            'image' => [
                'validate' => [
                    'size' => 10*1024*1024,
                    'ext'  => 'jpg,png,gif,jpeg',
                ],
                'path'     =>  '/images',
            ],
            'audio' => [
                'validate' => [
                    'size' => 100*1024*1024,
                    'ext'  => 'mp3,wav,cd,ogg,wma,asf,rm,real,ape,midi',
                ],
                'path'     =>  '/audios',
            ],
            'video' => [
                'validate' => [
                    'size' => 100*1024*1024,
                    'ext'  => 'mp4,avi,rmvb,rm,mpg,mpeg,wmv,mkv,flv',
                ],
                'path'     =>  '/videos',
            ],
            'file' => [
                'validate' => [
                    'size' => 5*1024*1024,
                    'ext'  => 'doc,docx,xls,xlsx,pdf,ppt,txt,rar,zip,pem,p12',
                ],
                'path'     =>  '/files',
            ],
        ];
    
        private function checkUpload($type){
            try{
                if(empty($_FILES) || empty($_FILES[$this->name])) throw new Exception("未上传文件!");
                if(!in_array($type,array_keys($this->config))) throw new Exception("文件类型不存在!");
                return $type;
            }catch (Exception $e){
                return \app\common\controller\Base::show(100,$e->getMessage());
            }
    
        }
    
    
        public function upfile($infoSwitch = false){
            $file = request()->file($this->name);
            try{
                if($file == null) throw new ValidateException("the file cannot be empty");
                validate(['file' => self::validateFile()])->check(['file' => $file]);
                $savename = \think\facade\Filesystem::disk('public')->putFile( $this->module.$this->config[$this->type]['path'], $file);
                if($infoSwitch){
                    return self::getFileInfo($file,$savename);
                }
                return $savename;
            }catch (\think\exception\ValidateException $e){
                return \app\common\controller\Base::show(100,self::languageChange($e->getMessage()));
            }
        }
    
        private function validateFile(){
            if(empty($this->image)){
                $validataType = [
                    'fileSize' => $this->config[$this->type]['validate']['size'],
                    'fileExt'  => $this->config[$this->type]['validate']['ext'],
                ];
            }else{
                if(is_array($this->image)) throw new ValidateException("");
                $validataType = [
                    'fileSize' => $this->config[$this->type]['validate']['size'],
                    'fileExt'  => $this->config[$this->type]['validate']['ext'],
                    'image'    => $this->image //示例值 [200,200]
                ];
            }
            return $validataType;
        }
    
        private function languageChange($msg){
            $data = [
                'the file cannot be empty'                   => '文件不能为空!',
                'unknown upload error'                       => '未知上传错误!',
                'file write error'                           => '文件写入失败!',
                'upload temp dir not found'                  => '找不到临时文件夹!',
                'no file to uploaded'                        => '没有文件被上传!',
                'only the portion of file is uploaded'       => '文件只有部分被上传!',
                'upload File size exceeds the maximum value' => '上传文件大小超过了最大值!',
                'upload write error'                         => '文件上传保存错误!',
            ];
            return $data[$msg] ?? $msg;
        }
    
        private function getFileInfo($file,$savename){
            $info = [
                'path' => config('filesystem.disks.public.url').'/'.str_replace('\\','/',$savename),
                'url'  => $this->domain.config('filesystem.disks.public.url').'/'.str_replace('\\','/',$savename),
                'size' => $file->getSize(),
                'name' => $file->getOriginalName(),
                'mime' => $file->getMime(),
                'ext'  => $file->extension()
            ];
            return $info;
        }
    
    
    }

> 使用方法 :
> 
>         $instanceUpload = new upload($fileName,$fileType);
>         $info = $instanceUpload->upfile(true);
0

评论 (0)

取消