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