当前位置:首页 > CMS教程 > 其它CMS > 列表

laravel-admin的图片删除实例

发布:smiling 来源: PHP粉丝网  添加日期:2021-12-26 16:17:01 浏览: 评论:0 

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

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

  1. <?php 
  2.  
  3. namespace App\Admin\Controllers; 
  4.  
  5. use App\Http\Controllers\Controller; 
  6. use Carbon\Carbon; 
  7. use Encore\Admin\Controllers\ModelForm; 
  8. use Encore\Admin\Form\Field\File; 
  9. use Illuminate\Http\UploadedFile; 
  10.  
  11. class FileController extends Controller 
  12. { 
  13.   use ModelForm; 
  14.  
  15.   public function index($type,$file=null,$ajax=true,$file_name="") 
  16.   { 
  17.     $file = $file ? $file : $_FILES['img']; 
  18.  
  19.     if($file['error']!=0){ 
  20.       $data = array('status'=>false,'msg'=>trans('admin::lang.Upload_error')); 
  21.       return $ajax ? json_encode($data) : $data; 
  22.     } 
  23.  
  24.  
  25.     //得到文件名称 
  26.     $name = $file['name']; 
  27.     $img_type = strtolower(substr($name,strrpos($name,'.')+1)); //得到文件类型,并且都转化成小写 
  28.     $allow_type = array('jpg','jpeg','gif','png'); //定义允许上传的类型 
  29. //判断文件类型是否被允许上传 
  30.     if(!in_array($img_type, $allow_type)){ 
  31.       $data = array('status'=>false,'msg'=>trans('admin::lang.imgtype_error').$img_type); 
  32.       return $ajax ? json_encode($data) : $data; 
  33.     } 
  34. //判断是否是通过HTTP POST上传的 
  35.     if(!is_uploaded_file($file['tmp_name'])){ 
  36.       $data = array('status'=>false,'msg'=>trans('admin::lang.post_img')); 
  37.       return $ajax ? json_encode($data) : $data; 
  38.     } 
  39.     $file_name = $file_name ? $file_name.'.'.$img_type : md5(uniqid()).Carbon::now()->timestamp.'.'.$img_type; 
  40.  
  41.     if($type=='attr_img'){ 
  42.       $upload_path = public_path().'/upload/goods/attr_img/'; //上传文件的存放路径 
  43.       $path = "goods/attr_img/"; 
  44.     }elseif($type=='goods'){ 
  45.       $upload_path = public_path().'/upload/goods/'; //上传文件的存放路径 
  46.       $path = "goods/"; 
  47.     }else{ 
  48.       $upload_path = public_path().'/upload/'.$type.'/'; //上传文件的存放路径 
  49.       $path = $type."/"; 
  50.     } 
  51.     if(!is_dir($upload_path)){ 
  52.       @mkdir($upload_path); 
  53.     } 
  54. //开始移动文件到相应的文件夹 
  55.     if(move_uploaded_file($file['tmp_name'],$upload_path.$file_name)){ 
  56.       $data['status'] = true; 
  57.       $data['path'] = $path.$file_name; 
  58.       $data['view_path'] = config('admin.upload.host').$path.$file_name; 
  59.     }else{ 
  60.       $data = array('status'=>false,'msg'=>trans('admin::lang.moveimg_error')); 
  61.       return $ajax ? json_encode($data) : $data; 
  62.     } 
  63.     if($ajax){ 
  64.       return json_encode($data); 
  65.     }else{ 
  66.       return $data; 
  67.     } 
  68.   } 
  69.  
  70.   public function multipleImg($type,$files,$ajax=true){ 
  71.     $imgs = array('status'=>true); 
  72.     for($i=0;$i<count($files['name']);$i++){ 
  73.       $file['name'] = $files['name'][$i]; 
  74.       $file['type'] = $files['type'][$i]; 
  75.       $file['tmp_name'] = $files['tmp_name'][$i]; 
  76.       $file['error'] = $files['error'][$i]; 
  77.       $file['size'] = $files['size'][$i]; 
  78.       $data = $this->index($type,$file,false); 
  79.       if($data['status']){ 
  80.         $imgs['path'][$i] = $data['path']; 
  81.         $imgs['view_path'][$i] = $data['view_path']; 
  82.       }else{ 
  83.  
  84.         return $ajax ? json_encode(array('status'=>false,'msg'=>$data['msg'])) : array('status'=>false,'msg'=>$data['msg']); 
  85.       } 
  86.     } 
  87.     return $ajax ? json_encode($imgs) : $imgs; 
  88.   } 
  89. } 

然后在form中这么写:

$form->image('img','图片')->deleteUrl(admin_url('mconfig/deleteUrl/' . img))->uniqueName()->value('1.jpg');

其中value是默认显示的图片,uniquename是使用随机生成的文件名,deleteUrl是删除图片的路径

再在form方法后新建方法,删除数据库里的数据

  1. public function deleteUrl($img){ 
  2.   $mconfig = MConfigModel::where('img',$img)->first(); 
  3.   $path = config('admin.upload.host').$mconfig->val; 
  4.   if(file_exists($path)){ 
  5.     @unlink ($path); 
  6.   } 
  7.   $mconfig->val = ""; 
  8.   $mconfig->save(); 
  9.   return array('status'=>true); 
  10. } 

最后别忘记添加相应的路由:

$router->put('/mconfig/deleteUrl/{img}','MConfigController@deleteUrl');

Tags: laravel-admin laravel图片删除

分享到: