laravel-admin的图片删除实例

吾爱主题 阅读:123 2021-08-25 15:02:00 评论:0

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

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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 <?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中这么写:

?
1 2 $form - >image( 'img' , '图片' ) - >deleteUrl(admin_url( 'mconfig/deleteUrl/' . img)) - >uniqueName() - >value( '1.jpg' ); / / 其中value是默认显示的图片,uniquename是使用随机生成的文件名,deleteUrl是删除图片的路径

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

?
1 2 3 4 5 6 7 8 9 10 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); }

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

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

以上这篇laravel-admin的图片删除实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_33541033/article/details/78709576

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容