laravel-admin的图片删除实例

时间:2021-05-26

对laravel-admin的图片上传机制有深深的疑惑,在用户信息页面上删除头像图片就会报错,当时用的是1.4的,后来更新1.5 发现删除按钮直接消失了,在使用过程中,要是在form中正常使用image就好用,稍微写的复杂一点(比如我把$form->image写在tab里的时候)就不好用了。

针对这个问题写了一个方法,(也不知道适不适用哈)

<?phpnamespace 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的图片删除实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章