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 相关文章推荐
一个ftp类(ini.php)
Oct 09 PHP
php获得当前的脚本网址
Dec 10 PHP
url decode problem 解决方法
Dec 26 PHP
深入PHP运行环境配置的详解
Jun 04 PHP
PHP中数组定义的几种方法
Sep 01 PHP
php发送post请求的三种方法
Feb 11 PHP
php结合ajax实现赞、顶、踩功能实例
May 12 PHP
phpStudy访问速度慢和启动失败的解决办法
Nov 19 PHP
使用PHPExcel导出Excel表
Sep 08 PHP
PHP使用SOAP调用API操作示例
Dec 25 PHP
PHP chunk_split()函数讲解
Feb 12 PHP
PHP解决高并发的优化方案实例
Dec 10 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
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
jQuery设置和获取HTML、文本和值示例
2014/07/08 Javascript
jquery中checkbox全选失效的解决方法
2014/12/26 Javascript
JavaScript中的闭包(Closure)详细介绍
2014/12/30 Javascript
JavaScript验证Email(3种方法)
2015/09/21 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
vue中如何使用ztree
2018/02/06 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
python实现合并两个数组的方法
2015/05/16 Python
Python抓取框架 Scrapy的架构
2016/08/12 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
详解Python字典小结
2018/10/20 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
Python发展史及网络爬虫
2019/06/19 Python
python写入文件自动换行问题的方法
2019/07/05 Python
用sqlalchemy构建Django连接池的实例
2019/08/29 Python
Python 中如何实现参数化测试的方法示例
2019/12/10 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
python设置表格边框的具体方法
2020/07/17 Python
Python如何急速下载第三方库详解
2020/11/02 Python
科尔士百货公司官网:Kohl’s
2016/07/11 全球购物
经济学人订阅:The Economist
2018/07/19 全球购物
英国最受欢迎的平价女士时装零售商:Roman Originals
2019/11/02 全球购物
环境科学专业个人求职信
2013/09/26 职场文书
中医专业职业生涯规划书范文
2014/01/04 职场文书
手术室护士节演讲稿
2014/08/27 职场文书
2014年个人售房协议书
2014/10/30 职场文书
2016父亲节感恩话语
2015/12/09 职场文书