欢迎您访问我的笔记本站旨在于记录一些平时工作中遇到的一些问题和解决方法,方便查阅,部分内容来源于网络,如有侵权请联系我删除
  • 微信微信
您现在的位置是:首页 > PHP后端

Yii文件上传-[原创]

日期:2021-09-29 15:59:04 作者:tanyi 来源:我的笔记 浏览:713 次
Yii文件上传社区文档里面只有结合模型上传的方式,这种对于我不喜欢用模型(一张表对应一个模型)的人来说很烦,其实也可以脱离模型单独上传,但是UploadedFile类并没有验证方法,所以还需要自己写方法验证一下
static private function img_check($file,array $rules){
    if(empty($rules)) return '未设置验证规则';
    foreach($rules as $key=>$vo){
        switch ($key){
            case 'size':
                if($file->size>=$vo) return  '文件大小超过限制';break;
            case 'extension':
                if(!in_array($file->extension,$vo)) return  '文件格式不正确';break;
        }
    }
    return false;
}

/**
 * 上传文件
 * @param $field  文件域的字段名
 * @param array $rule 验证规则
 * @return array
 */
static function upload_file($field,$rule=[]){
    $upload=(new UploadedFile())::getInstanceByName($field);
    if(!empty($rule)){
        $check=self::img_check($upload,$rule);
        if($check) return self::show_data($check,1);
    }
    $path='upload/'.date('Ym').'/';
    if(!file_exists($path)) mkdir($path,0777,true);
    $src=$path.md5(time().rand(1000,9999)).'.'.$upload->extension;
    $r=$upload::getInstanceByName('pic')->saveAs($src);
    if($r) return self::show_data('上传成功',0,['src'=>'/'.$src]);
    return  self::show_data($upload->error,1);
}

控制器调用

$r=Help::upload_file('pic',['size'=>1024*1024*5,'extension'=>['jpeg','png','jpg']]);
return Help::json($r);


提交评论
评论列表