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 相关文章推荐
discuz 首页四格:最新话题+最新回复+热门话题+精华文章插件
Aug 19 PHP
深入PHP变量存储的详解
Jun 13 PHP
php中require和require_once的区别说明
Feb 27 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
Jun 12 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
Dec 10 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
Apr 04 PHP
php实现学生管理系统
Mar 21 PHP
简单谈谈 php 文件锁
Feb 19 PHP
PHP实现的用户注册表单验证功能简单示例
Feb 25 PHP
laravel异步监控定时调度器实例详解
Jun 21 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
Apr 26 PHP
实例化php类时传参的方法分析
Jun 05 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
ThinkPHP的L方法使用简介
2014/06/18 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
PHP MVC框架skymvc支持多文件上传
2016/05/26 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
js实现拖拽 闭包函数详细介绍
2012/11/25 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
JavaScript定义类的几种方式总结
2014/01/06 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
JavaScript将当前时间转换成UTC标准时间的方法
2015/04/06 Javascript
javascript实现禁止复制网页内容汇总
2015/12/30 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
canvas的神奇用法
2017/02/03 Javascript
Angular4学习笔记之实现绑定和分包
2017/08/01 Javascript
JS和jQuery通过this获取html标签中的属性值(实例代码)
2017/09/11 jQuery
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
js如何获取图片url的Blob值并预览示例代码
2019/03/07 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
javascript实现摄像头拍照预览
2019/09/30 Javascript
Openlayers实现距离面积测量
2020/09/28 Javascript
python生成随机验证码(中文验证码)示例
2014/04/03 Python
用Python遍历C盘dll文件的方法
2015/05/06 Python
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
Python读取mat文件,并转为csv文件的实例
2018/07/04 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
Python Tornado核心及相关原理详解
2020/06/24 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
STUBHUB日本:购买和出售全球活动门票
2018/07/01 全球购物
25岁生日感言
2014/01/13 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
python基础之爬虫入门
2021/05/10 Python
python微信智能AI机器人实现多种支付方式
2022/04/12 Python