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数据库连接
Oct 09 PHP
php 模拟post_验证页面的返回状态(实例讲解)
Oct 28 PHP
thinkphp验证码显示不出来的解决方法
Mar 29 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
Sep 22 PHP
php使用CURL伪造IP和来源实例详解
Jan 15 PHP
PHP 实现判断用户是否手机访问
Jan 21 PHP
PHP实现带重试功能的curl连接示例
Jul 28 PHP
PHP实践教程之过滤、验证、转义与密码详解
Jul 24 PHP
php单元测试phpunit入门实例教程
Nov 17 PHP
ecshop添加菜单及权限分配问题
Nov 21 PHP
PHP addslashes()函数讲解
Feb 03 PHP
php生成静态页面并实现预览功能
Jun 27 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
了解咖啡雨林联盟认证 什么是雨林认证 雨林认证是什么意思
2021/03/05 新手入门
PHP 中检查或过滤IP地址的实现代码
2011/11/27 PHP
PHP中实现中文字符进制转换原理分析
2011/12/06 PHP
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
2014/12/22 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
struts2 jquery 打造无限层次的树
2009/10/23 Javascript
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
菜鸟学习JavaScript小实验之函数引用
2010/11/17 Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
用Javascript来生成ftp脚本的小例子
2013/07/03 Javascript
用js实现in_array的方法
2013/11/05 Javascript
JavaScript中原型和原型链详解
2015/02/11 Javascript
JS实现可点击展开与关闭的左侧广告代码
2015/09/02 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
2016/12/24 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
nodejs log4js 使用详解
2019/05/31 NodeJs
微信小程序实现时间进度条功能
2020/11/17 Javascript
javascript数组元素删除方法delete和splice解析
2019/12/09 Javascript
Vue使用axios引起的后台session不同操作
2020/08/14 Javascript
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
python查询sqlite数据表的方法
2015/05/08 Python
详解 Python 读写XML文件的实例
2017/08/02 Python
django创建自定义模板处理器的实例详解
2017/08/14 Python
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
高中化学教学反思
2014/01/13 职场文书
关爱留守儿童倡议书
2014/04/15 职场文书
团队精神口号
2014/06/06 职场文书
单位作风建设自查报告
2014/10/23 职场文书
组织生活会发言材料
2014/12/15 职场文书
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers
Android中View.post和Handler.post的关系
2022/06/05 Java/Android