对laravel-admin的图片上传机制有深深的疑惑,在用户信息页面上删除头像图片就会报错,当时用的是1.4的,后来更新1.5 发现删除按钮直接消失了,在使用过程中,要是在form中正常使用image就好用,稍微写的复杂一点(比如我把$form->image写在tab里的时候)就不好用了。
针对这个问题写了一个方法,(也不知道适不适用哈)
<?php namespace App\\Admin\\Controllers; use App\\Http\\Controllers\\Controller; use Carbon\\Carbon; use Encore\\Admin\\Controllers\\ModelForm; use Encore\\Admin\\Form\\Field\\File; use Illuminate\\Http\\UploadedFile; class FileController extends Controller { use ModelForm; public function index($type,$file=null,$ajax=true,$file_name=\"\") { $file = $file ? $file : $_FILES[\'img\']; if($file[\'error\']!=0){ $data = array(\'status\'=>false,\'msg\'=>trans(\'admin::lang.Upload_error\')); return $ajax ? json_encode($data) : $data; } //得到文件名称 $name = $file[\'name\']; $img_type = strtolower(substr($name,strrpos($name,\'.\')+1)); //得到文件类型,并且都转化成小写 $allow_type = array(\'jpg\',\'jpeg\',\'gif\',\'png\'); //定义允许上传的类型 //判断文件类型是否被允许上传 if(!in_array($img_type, $allow_type)){ $data = array(\'status\'=>false,\'msg\'=>trans(\'admin::lang.imgtype_error\').$img_type); return $ajax ? json_encode($data) : $data; } //判断是否是通过HTTP POST上传的 if(!is_uploaded_file($file[\'tmp_name\'])){ $data = array(\'status\'=>false,\'msg\'=>trans(\'admin::lang.post_img\')); return $ajax ? json_encode($data) : $data; } $file_name = $file_name ? $file_name.\'.\'.$img_type : md5(uniqid()).Carbon::now()->timestamp.\'.\'.$img_type; if($type==\'attr_img\'){ $upload_path = public_path().\'/upload/goods/attr_img/\'; //上传文件的存放路径 $path = \"goods/attr_img/\"; }elseif($type==\'goods\'){ $upload_path = public_path().\'/upload/goods/\'; //上传文件的存放路径 $path = \"goods/\"; }else{ $upload_path = public_path().\'/upload/\'.$type.\'/\'; //上传文件的存放路径 $path = $type.\"/\"; } if(!is_dir($upload_path)){ @mkdir($upload_path); } //开始移动文件到相应的文件夹 if(move_uploaded_file($file[\'tmp_name\'],$upload_path.$file_name)){ $data[\'status\'] = true; $data[\'path\'] = $path.$file_name; $data[\'view_path\'] = config(\'admin.upload.host\').$path.$file_name; }else{ $data = array(\'status\'=>false,\'msg\'=>trans(\'admin::lang.moveimg_error\')); return $ajax ? json_encode($data) : $data; } if($ajax){ return json_encode($data); }else{ return $data; } } public function multipleImg($type,$files,$ajax=true){ $imgs = array(\'status\'=>true); for($i=0;$i<count($files[\'name\']);$i++){ $file[\'name\'] = $files[\'name\'][$i]; $file[\'type\'] = $files[\'type\'][$i]; $file[\'tmp_name\'] = $files[\'tmp_name\'][$i]; $file[\'error\'] = $files[\'error\'][$i]; $file[\'size\'] = $files[\'size\'][$i]; $data = $this->index($type,$file,false); if($data[\'status\']){ $imgs[\'path\'][$i] = $data[\'path\']; $imgs[\'view_path\'][$i] = $data[\'view_path\']; }else{ return $ajax ? json_encode(array(\'status\'=>false,\'msg\'=>$data[\'msg\'])) : array(\'status\'=>false,\'msg\'=>$data[\'msg\']); } } return $ajax ? json_encode($imgs) : $imgs; } }
然后在form中这么写:
$form->image(\'img\',\'图片\')->deleteUrl(admin_url(\'mconfig/deleteUrl/\' . img))->uniqueName()->value(\'1.jpg\'); //其中value是默认显示的图片,uniquename是使用随机生成的文件名,deleteUrl是删除图片的路径
再在form方法后新建方法,删除数据库里的数据
public function deleteUrl($img){ $mconfig = MConfigModel::where(\'img\',$img)->first(); $path = config(\'admin.upload.host\').$mconfig->val; if(file_exists($path)){ @unlink ($path); } $mconfig->val = \"\"; $mconfig->save(); return array(\'status\'=>true); }
最后别忘记添加相应的路由:
$router->put(\'/mconfig/deleteUrl/{img}\',\'MConfigController@deleteUrl\');
以上这篇laravel-admin的图片删除实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持免费资源网。
© 版权声明
THE END
暂无评论内容