侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

laravel-admin的图片删除实例

2022-06-24 星期五 / 0 评论 / 0 点赞 / 76 阅读 / 4620 字

对laravel-admin的图片上传机制有深深的疑惑,在用户信息页面上删除头像图片就会报错,当时用的是1.4的,后来更新1.5 发现删除按钮直接消失了,在使用过程中,要是在form中正常使用image就好用,稍微写的复

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

广告 广告

评论区