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桌面中心(三) 修改数据库
Mar 11 PHP
php is_file 判断给定文件名是否为一个正常的文件
May 10 PHP
删除无限分类并同时删除它下面的所有子分类的方法
Aug 08 PHP
PHP中使用memcache存储session的三种配置方法
Apr 05 PHP
php防止伪造的数据从URL提交方法
Jun 27 PHP
PHP基于反射机制实现插件的可插拔设计详解
Nov 10 PHP
php四种定界符详解
Feb 16 PHP
php 截取GBK文档某个位置开始的n个字符方法
Mar 08 PHP
php自定义函数实现统计中文字符串长度的方法小结
Apr 15 PHP
PHP memcache在微信公众平台的应用方法示例
Sep 13 PHP
PHP底层运行机制与工作原理详解
Jul 31 PHP
php+laravel 扫码二维码签到功能
May 15 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开启与关闭错误提示适用于没有修改php.ini的权限
2014/10/16 PHP
ThinkPHP 模板substr的截取字符串函数详解
2017/01/09 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
2019/08/14 PHP
php输出文字乱码的解决方法
2019/10/04 PHP
JS简单计算器实例
2015/01/20 Javascript
深入分析JSON编码格式提交表单数据
2015/06/25 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
微信小程序实现轮播图效果
2017/09/07 Javascript
浅谈Angular 的变化检测的方法
2018/03/01 Javascript
详解React之父子组件传递和其它一些要点
2018/06/25 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
详解JavaScript的数据类型以及数据类型的转换
2019/04/20 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
[37:29]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.19
2020/11/19 DOTA
python 从远程服务器下载日志文件的程序
2013/02/10 Python
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
Python实现一个简单的MySQL类
2015/01/07 Python
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
2018/12/27 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
Python程序控制语句用法实例分析
2020/01/14 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
python 元组和列表的区别
2020/12/30 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
最新个人职业生涯规划书
2014/01/22 职场文书
满月酒邀请函
2015/01/30 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
公司保密管理制度
2015/08/04 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL
Python jiaba库的使用详解
2021/11/23 Python