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 相关文章推荐
Zend Framework中的简单工厂模式 图文
Jul 10 PHP
记录PHP错误日志 display_errors与log_errors的区别
Oct 09 PHP
强烈声明: 不要使用(include/require)_once
Jun 06 PHP
php 根据url自动生成缩略图并处理高并发问题
Jan 23 PHP
php表单请求获得数据求和示例
May 15 PHP
PHP处理会话函数大总结
Aug 05 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 PHP
php实现博客,论坛图片防盗链的方法
Oct 15 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
Nov 20 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
Oct 10 PHP
PHP内存溢出优化代码详解
Feb 26 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之require/include顺序 推荐
2011/01/02 PHP
php生成curl命令行的方法
2015/12/14 PHP
php时间函数用法分析
2016/05/28 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
Jquery中对数组的操作代码
2011/08/12 Javascript
JavaScript var声明变量背后的原理示例解析
2013/10/12 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
2015/03/23 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
2016/12/28 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
vue两个组件间值的传递或修改方式
2018/07/04 Javascript
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
ajaxfileupload.js实现上传文件功能
2019/04/19 Javascript
7个好用的JavaScript技巧分享(译)
2019/05/07 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
python实现在windows下操作word的方法
2015/04/28 Python
Python存取XML的常见方法实例分析
2017/03/21 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
python 中的divmod数字处理函数浅析
2017/10/17 Python
Python OpenCV处理图像之图像直方图和反向投影
2018/07/10 Python
python写入文件自动换行问题的方法
2019/07/05 Python
python操作yaml说明
2020/04/08 Python
新建文件时Pycharm中自动设置头部模板信息的方法
2020/04/17 Python
个人简历自我评价八例
2013/10/31 职场文书
研发工程师的岗位职责
2013/11/18 职场文书
大学生职业生涯规划书范文
2014/01/14 职场文书
节能宣传周活动总结
2014/05/08 职场文书
停电调休通知
2015/04/16 职场文书
朝花夕拾读书笔记
2015/06/29 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS