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 相关文章推荐
简单的页面缓冲技术
Oct 09 PHP
用PHP实现的随机广告显示代码
Jun 14 PHP
php adodb连接mssql解决乱码问题
Jun 12 PHP
PHP与MYSQL中UTF8编码的中文排序实例
Oct 21 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
Feb 08 PHP
解析WordPress中的post_class与get_post_class函数
Jan 04 PHP
PHP面向对象程序设计实例分析
Jan 26 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
May 20 PHP
php 使用html5实现多文件上传实例
Oct 24 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
Centos7安装swoole扩展操作示例
Mar 26 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
Dec 30 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扩展图文教程
2008/12/12 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
2014/09/10 PHP
JS OOP包机制,类创建的方法定义
2009/11/02 Javascript
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
2010/01/12 Javascript
捕获键盘事件(且兼容各浏览器)
2013/07/03 Javascript
仿百度的关键词匹配搜索示例
2013/09/25 Javascript
jQuery实现的经典滑动门效果
2015/09/22 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
2016/05/15 Javascript
AngularJS基础 ng-mouseleave 指令详解
2016/08/02 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
vue项目中全局引入1个.scss文件的问题解决
2019/08/01 Javascript
JS实现图片切换特效
2019/12/23 Javascript
记录一次websocket封装的过程
2020/11/23 Javascript
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
对python GUI实现完美进度条的示例详解
2018/12/13 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
PHP面试题附答案
2015/11/28 面试题
方法名是否可以与构造器的名字相同
2012/06/04 面试题
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
历史系毕业生自荐信
2013/10/28 职场文书
《白鹅》教学反思
2014/04/13 职场文书
期中考试反思800字
2014/05/01 职场文书
校庆团日活动总结
2014/08/28 职场文书
2014年学习全国道德模范事迹思想汇报
2014/09/15 职场文书
2014政府领导班子对照检查材料思想汇报(3篇)
2014/09/26 职场文书
2014年图书管理员工作总结
2014/12/01 职场文书
针对吵架老公保证书
2015/05/08 职场文书
人事部:年度述职报告范文
2019/07/12 职场文书
Java基础之this关键字的使用
2021/06/30 Java/Android
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js