### 图片上传(插件) <blockquote class="danger"><p>插件上传图片的话是先将图片上传上去, 返回一个参数值, 这样就打成了无刷新预览的目的.唯一的缺点就是上传之后, 他再次上传或者持续上传的话, 不会写入数据库, 就变成了冗余图片. 需要其他机制处理. </p></blockquote> * 图片上传采用layer+php上传. * 没有新建页面, 直接在三级分销-积分处理里面加上这句即可上传. * 函数为integral, 函数写在application/admin/model/Index.php * addIntegral方法 ~~~ ->addFormItem('picture_id', '上传头像','上传头像.','picture','','required') ~~~ * 路径application/admin/model/Index.php * 此处采用layer上传, 简单的写了下回调. 觉得这个组件回调不是很好看.虽然解决了问题. * 上传访问路径, admin下的File下的upload.公有上传 ![](https://box.kancloud.cn/d0885a384bd393426f1d253d45a13361_451x175.png) ~~~ {case value="picture"} {php} $webuploader=1; if (strpos($field['name'],'[')) { $field['id'] = str_replace(']','',str_replace('[','',$field['name'])); }else{ $field['id'] = $field['name']; } {/php} <div class="layui-form-item item_{$field.name} {$field.extra_class}"> <label class="layui-form-label">{$field.title}</label> <div class=""> <input type="file" name="file" class="layui-upload-file " style=" float:left;" id="picture_{$field.name}"> <img src="" width="150px;" height="150px;" id="img_{$field.id}" style="display:none; float:left;"> <input class="attach" type="hidden" id="{$field.id}" name="{$field.name}" value=""/> </div> </div> <script> layui.use('upload', function(){ layui.upload({ elem:"#picture_{$field.name}" , url: "{:url('admin/File/upload',['uploadtype'=>'picture','setpath'=>'product'])}" //上传接口 ,success: function(res){ //上传成功后的回调 $("#img_{$field.id}").css('display','block'); $("#img_{$field.id}").attr('src',res['info']['url']); $("#{$field.id}").attr("value",res['info']['url']); } }); }); </script> {/case} ~~~ * 在配置文件里面配置三种上传的路径, 也就是不同的上传 * 附件上传用于传附件的. * picture用于上传图片的. * avatar_upload用于上传头像的. * 这样就可以通过不同的上传进行判断. js判断也好.后端判断也好. 此处只做了picture_upload其他上传自行扩展. * 路径application/config.php ~~~ // +---------------------------------------------------------------------- // | 附件上传 // +---------------------------------------------------------------------- 'file_upload' => array( // 允许上传的文件MiMe类型 'mimes' => [], // 上传的文件大小限制 (0-不做限制) 'maxSize' => 2*1024*1024, // 允许上传的文件后缀 'exts' => ['xlsx,xls'], // 子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组 'subName' => ['date', 'Y-m-d'], //保存根路径 'rootPath' => './public/uploads/attachment', // 保存路径 'savePath' => '', // 上传文件命名规则,date,md5,sha1,自定义规则 'saveName' => 'uniqid', // 文件上传驱动e, 'driver' => 'local', ), 'picture_upload' => array( // 允许上传的文件MiMe类型 'mimes' => [], // 上传的文件大小限制 'maxSize' => 2*1024*1024, // 允许上传的文件后缀 'exts' => 'gif,jpg,jpeg,bmp,png', // 子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组 'subName' => ['date', 'Y-m-d'], //保存根路径 'rootPath' => './public/uploads/picture', // 保存路径 'savePath' => '', // 上传文件命名规则,date,md5,sha1,自定义规则 'saveName' => 'uniqid', // 文件上传驱动e, 'driver' => 'local', ), 'avatar_upload' => array( // 允许上传的文件MiMe类型 'mimes' => [], // 上传的文件大小限制 'maxSize' => 2*1024*1024, // 允许上传的文件后缀 'exts' => 'gif,jpg,jpeg,bmp,png', // 子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组 'subName' => ['date', 'Y-m-d'], //保存根路径 'rootPath' => './public/uploads/avatar', // 保存路径 'savePath' => '', // 上传文件命名规则,date,md5,sha1,自定义规则 'saveName' => 'uniqid', // 文件上传驱动e, 'driver' => 'local', ), ~~~ * 文件控制器 * 这个为公有文件控制器, 用于所有单个上传处理. * 路径application/admin/controller/File.php ~~~ namespace app\admin\controller; use app\admin\controller\Base; use app\admin\controller\Upload as UploadController; use think\Loader; use think\Config; class File extends Base { function _initialize() { parent::_initialize(); // p($this->member_model); // exit; } /** * 上传 * @return [type] [description] */ public function upload() { $uploadtype = $this->param['uploadtype']; $setpath = $this->param['setpath']; $controller = new UploadController; $return = $controller->upload($uploadtype,$setpath); return json($return); } /** *[uploadAvatar] 上传图像操作 * @return [type] [description] */ public function uploadAvatar($uuid=0) { $return = [ 'status' =>1, 'path' =>'/public/images/defalut.jpg', 'msg' =>'提示成功' ]; return json($return); } } ~~~ * 上传控制器, 在此处上传完成之后将值回调回去. * 此处作为公有, 无论有怎么样的单图上传即可在此处理. * 路径application/admin/controller/Upload.php ~~~ namespace app\admin\controller; use think\Request; class Upload { protected $request; /** * 架构函数 * @param Request $request Request对象 * @access public */ public function __construct() { $this->request = Request::instance(); $this->file_model = new File(); } /** * 上传控制器 */ public function upload($uploadtype,$setpath) { $upload_type = $uploadtype; $setpath = $setpath; $config = config($upload_type.'_upload'); $rootPath = $setpath!='picture' && $setpath ? './public/uploads/'.$setpath : $config['rootPath']; $upload_path = $rootPath.'/'.call_user_func_array($config['subName'][0],[$config['subName'][1],time()]); $file = $this->request->file('file'); $info = $file->validate(['size'=>$config['maxSize'],'ext'=>$config['exts'][0]])->rule($config['saveName'])->move($upload_path, true, false); if ($info) { $upload_info = $this->parseFile($info); $save_upload_name = $upload_info['path']; //oss_uploadFile($save_upload_name);//存储到静态资源服务器 $return['status'] = 1; $return['info'] = $upload_info; } else { $return['status'] = 0; $return['info'] = $file->getError(); } return $return; } /** * 上传用户头像 * @param integer $uid [description] * @return [type] [description] */ public function uploadAvatar($uid=0) { if (!$uid) return false; $config = config('avatar_upload'); $upload_path = $config['rootPath'].'/'.$uid; // 获取表单上传文件 例如上传了001.jpg $file = $this->request->file('file'); $info = $file->validate(['size'=>$config['maxSize'],'ext'=>$config['exts']])->rule($config['saveName'])->move($upload_path, true, false); if ($info) { $return['status'] = 1; $return['info'] = $info; } else { $return['status'] = 0; $return['info'] = $file->getError(); } return $return; } /** * 保存上传的信息到数据库 * @var view * @access public */ public function save($config, $from_file_name, $file) { $file = $this->parseFile($file); $file['member_id'] = is_login(); $file['location'] = $config['driver']; $file['status'] = 1; $info=$this->file_model->get(['md5'=>$file['md5'],'sha1'=>$file['sha1']]); if ($info) { $info = $info->toArray(); $info['msg']='文件已存在'; return $info; } else { $this->file_model->allowField(true)->data($file)->save(); $id = $this->file_model->id; if ($id>0) { $data = $this->file_model->get($id); return $data; } else { return false; } } } protected function parseFile($info) { $data['create_time'] = $info->getATime(); $data['basename'] = $info->getBasename(); //$data['c_time'] = $info->getCTime(); $data['ext'] = $info->getExtension(); $data['name'] = $info->getFilename(); $data['mime_type'] = strstr($info->getMime(),'/',true); $data['savepath'] = $info->getPath(); $data['path'] = str_replace("\\", '/', substr($info->getPathname(), 1)); $data['url'] = config('oss_alias_url').$data['path']; $data['size'] = $info->getSize(); $data['md5'] = md5_file($info->getPathname()); $data['sha1'] = sha1_file($info->getPathname()); return $data; } } ~~~