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 mysql数据库操作分页类
Jun 04 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
Jul 18 PHP
解析zend Framework如何自动加载类
Jun 28 PHP
PHP 文件编程综合案例-文件上传的实现
Jul 03 PHP
用PHP实现弹出消息提示框的两种方法
Dec 17 PHP
PHP jQuery表单,带验证具体实现方法
Feb 15 PHP
php实现mysql封装类示例
May 07 PHP
php生成html文件方法总结
Dec 01 PHP
Windows下编译PHP5.4和xdebug全记录
Apr 03 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
May 13 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 PHP
PHP代码覆盖率统计详解
Jul 22 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常用正则表达式精选(推荐)
2019/05/28 PHP
javascript EXCEL 操作类代码
2009/07/30 Javascript
js更优雅的兼容
2010/08/12 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
2014/06/30 Javascript
JavaScript中的公有、私有、特权和静态成员用法分析
2014/11/20 Javascript
深入分析JSON编码格式提交表单数据
2015/06/25 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
layui表格数据重载
2019/07/27 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
[02:01]2018完美盛典-开场舞《双子星》
2018/12/16 DOTA
python关键字and和or用法实例
2015/05/28 Python
python使用wmi模块获取windows下的系统信息 监控系统
2015/10/27 Python
Python 基础知识之字符串处理
2017/01/06 Python
利用python爬取软考试题之ip自动代理
2017/03/28 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
python爬虫中url管理器去重操作实例
2020/11/30 Python
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
班组长工作职责
2013/12/25 职场文书
服务员自我评价
2014/01/25 职场文书
学校门卫管理制度
2014/01/30 职场文书
餐厅筹备计划书
2014/04/25 职场文书
珍惜资源的建议书
2014/08/26 职场文书
办公室岗位职责
2015/02/04 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
团队拓展训练感想
2015/08/07 职场文书
《包身工》教学反思
2016/02/23 职场文书
浅谈克隆 JavaScript
2021/11/02 Javascript