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和ACCESS写聊天室(十)
Oct 09 PHP
真正的ZIP文件操作类(php)
Jul 21 PHP
通用PHP动态生成静态HTML网页的代码
Mar 04 PHP
解析PHP生成静态html文件的三种方法
Jun 18 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
Feb 18 PHP
php实例分享之html转为rtf格式
Jun 02 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
Jul 14 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
Apr 07 PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 PHP
swoole_process实现进程池的方法示例
Oct 29 PHP
Yii框架日志操作图文与实例详解
Sep 09 PHP
php array 转json及java 转换 json数据格式操作示例
Nov 13 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调用Twitter的RSS的实现代码
2010/03/10 PHP
PHP 转义使用详解
2013/07/15 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
开启PHP的伪静态模式
2015/12/31 PHP
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
javascript中函数作为参数调用的方法
2015/02/09 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
js简单工厂模式用法实例
2015/06/30 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
JavaScript如何获取一个元素的样式信息
2019/07/29 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
浅析Python中else语句块的使用技巧
2016/06/16 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
python使用adbapi实现MySQL数据库的异步存储
2019/03/19 Python
python实现udp聊天窗口
2020/03/31 Python
Linux内核产生并发的原因
2012/07/13 面试题
致跳远运动员加油稿
2014/02/11 职场文书
测控技术自荐信
2014/06/05 职场文书
会议欢迎标语
2014/06/30 职场文书
环卫工人节活动总结
2014/08/29 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
布达拉宫的导游词
2015/02/02 职场文书
心得体会该怎么写呢?
2019/06/27 职场文书
《飘》英文读后感五篇
2019/10/11 职场文书
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers