laravel-admin的图片删除实例


Posted in PHP onSeptember 30, 2019

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

PHP 相关文章推荐
用PHP开发GUI
Oct 09 PHP
谈谈PHP语法(4)
Oct 09 PHP
PHP 循环删除无限分类子节点的实现代码
Jun 21 PHP
PHP开发框架kohana中处理ajax请求的例子
Jul 14 PHP
浅析PHP程序设计中的MVC编程思想
Jul 28 PHP
PHP中IP地址与整型数字互相转换详解
Aug 20 PHP
php连接mysql数据库
Mar 21 PHP
详解PHP中的 input属性(隐藏 只读 限制)
Aug 14 PHP
Laravel 5.4.36中session没有保存成功问题的解决
Feb 19 PHP
使用PHPWord生成word文档的方法详解
Jun 06 PHP
PHP基于array_unique实现二维数组去重
Jul 14 PHP
PHP7 字符串处理机制修改
Mar 09 PHP
laravel-admin的多级联动方法
Sep 30 #PHP
php更新cookie内容的详细方法
Sep 30 #PHP
使用laravel的migrate创建数据表的方法
Sep 30 #PHP
Yii2.0框架behaviors方法使用实例分析
Sep 30 #PHP
php解决约瑟夫环算法实例分析
Sep 30 #PHP
php使用curl伪造浏览器访问操作示例
Sep 30 #PHP
laravel-admin 在列表页添加自定义按钮的例子
Sep 30 #PHP
You might like
如何在PHP中使用Oracle数据库(3)
2006/10/09 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
javascript 浏览器检测代码精简版
2010/03/04 Javascript
用js实现trim()的解决办法
2013/04/16 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
2014/09/26 Javascript
node.js操作mysql(增删改查)
2015/07/24 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
react-router中的属性详解
2017/06/01 Javascript
详解Angular2学习笔记之Html属性绑定
2018/01/03 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
ES10 特性的完整指南小结
2019/03/04 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
vue 检测用户上传图片宽高的方法
2020/02/06 Javascript
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
python实现socket端口重定向示例
2014/02/10 Python
Python中针对函数处理的特殊方法
2014/03/06 Python
python如何查看微信消息撤回
2018/11/27 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
Selenium基于PIL实现拼接滚动截图
2020/04/10 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
2020/04/20 Python
django rest framework serializers序列化实例
2020/05/13 Python
购买一个高级域名:BuyDomains
2018/03/11 全球购物
购买中国最好的电子产品:Geekbuying
2018/03/13 全球购物
公务员的自我鉴定
2013/10/26 职场文书
银行实习生的自我评价
2013/12/09 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
劳动仲裁调解书
2015/05/20 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书