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文件下载类
Dec 06 PHP
php长字符串定义方法
Jul 12 PHP
php的POSIX 函数以及进程测试的深入分析
Jun 03 PHP
解析PHP自带的进位制之间的转换函数
Jun 08 PHP
PHP获取网页标题的3种实现方法代码实例
Apr 11 PHP
PHP嵌套输出缓冲代码实例
May 12 PHP
PHP扩展Memcache分布式部署方案
Dec 06 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
Oct 26 PHP
详细解读php的命名空间(二)
Feb 21 PHP
php获取用户真实IP和防刷机制的实例代码
Nov 28 PHP
Laravel向公共模板赋值方法总结
Jun 25 PHP
PHP7原生MySQL数据库操作实现代码
Jul 03 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
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
symfony表单与页面实现技巧
2015/01/26 PHP
PHP单例模式详细介绍
2015/07/01 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
2017/10/23 PHP
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
js禁止回车提交表单的示例代码
2013/12/23 Javascript
jquery对单选框,多选框,文本框等常见操作小结
2014/01/08 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
Node.js 制作实时多人游戏框架
2015/01/08 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
2020/12/24 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
2015/03/24 Javascript
js和jquery实现监听键盘事件示例代码
2020/06/24 Javascript
Bootstrap企业网站实战项目4
2016/10/14 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
vue与TypeScript集成配置最简教程(推荐)
2017/10/17 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
vue项目中微信登录的实现操作
2020/09/08 Javascript
[03:44]2014DOTA2国际邀请赛 71专访:DK战队赛前讨论视频遭泄露
2014/07/13 DOTA
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
python 正则式 概述及常用字符
2009/05/07 Python
解决Python3.5+OpenCV3.2读取图像的问题
2018/12/05 Python
Python脚本完成post接口测试的实例
2018/12/17 Python
解决IDEA 的 plugins 搜不到任何的插件问题
2020/05/04 Python
python 调用Google翻译接口的方法
2020/12/09 Python
Python实现我的世界小游戏源代码
2021/03/02 Python
有关HTML5页面在iPhoneX适配问题
2017/11/13 HTML / CSS
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
中专生自我鉴定书范文
2013/12/28 职场文书
《菜园里》教学反思
2014/04/17 职场文书
安全责任协议书
2014/04/21 职场文书
学校教代会开幕词
2016/03/04 职场文书
python解决12306登录验证码的实现
2021/04/18 Python
vue首次渲染全过程
2021/04/21 Vue.js