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.ini中文版(1)
Oct 09 PHP
推荐php模板技术[转]
Jan 04 PHP
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
Mar 15 PHP
php 面试碰到过的问题 在此做下记录
Jun 09 PHP
解析:使用php mongodb扩展时 需要注意的事项
Jun 18 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 PHP
微信公众平台开发之天气预报功能
Aug 31 PHP
php编程中echo用逗号和用点号连接的区别
Mar 26 PHP
ThinkPHP框架实现数据增删改
May 07 PHP
php实现解析xml并生成sql语句的方法
Feb 03 PHP
PHP中“=&gt;
Mar 01 PHP
laravel使用Faker数据填充的实现方法
Apr 12 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数据结构与算法(PHP描述) 查找与二分法查找
2012/06/21 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
js获取当前select 元素值的代码
2010/04/19 Javascript
javascript 主动派发事件总结
2011/08/09 Javascript
js查错流程归纳
2012/05/04 Javascript
jQuery链使用指南
2015/01/20 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
Bootstrap 响应式实用工具实例详解
2017/03/29 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
2019/06/10 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
2021/02/15 Javascript
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
python小技巧之批量抓取美女图片
2014/06/06 Python
Python中使用PIPE操作Linux管道
2015/02/04 Python
详解Python中的循环语句的用法
2015/04/09 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
python关闭占用端口方式
2019/12/17 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
2020/01/18 Python
python退出循环的方法
2020/06/18 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
2021/02/06 Python
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
HTML5计时器小例子
2013/10/15 HTML / CSS
HTML5 实现图片上传预处理功能
2020/02/06 HTML / CSS
中国最大的潮流商品购物网站:YOHO!BUY有货
2017/01/07 全球购物
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
劳资专员岗位职责
2013/12/27 职场文书
《回乡偶书》教学反思
2014/04/12 职场文书
考生诚信考试承诺书
2014/05/23 职场文书
年终考核实施方案
2014/05/26 职场文书
百家讲坛观后感
2015/06/12 职场文书
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技
vscode远程免密登入Linux服务器的配置方法
2022/06/28 Servers