TP5封装图片上传方法(也适用于文件)

7 篇文章 0 订阅
5 篇文章 0 订阅

在项目中,经常会遇到需要进行图片,或者文件上传的功能,这个时候如果用原生php开发,不仅代码繁琐,开发效率低,而且代码可读性较差,不利于后期代码修改,所以这个时候我们不如使用tp5框架封装的文件上传函数来开发。经过一番对tp5手册提供的文件上传代码的研究,我将图片上传再一次做了封装,并将其定义在公共文件common.php中。

  1. 先在文件头部使用命名空间think\File
  2. 封装单图片上传和多图片上传方法
use think\File;

/**
 * 上传单张图片,返回值为保存路径或false
 * @param $file
 * @return bool
 */
function addImg(File $file)
{
    //移动至public/uploads
    $info = $file->validate(['ext' => 'jpg,jpeg,png,gif'])->move(ROOT_PATH . 'public' . DS . 'uploads');
    if ($info) {
        return $info->getSaveName();
    }
    return false;
}

/**
 * 上传多张图片,返回值为保存路径数组,若有'error'则上传不成功
 * @param File $files
 */
function addImgs($files)
{
    $arr = [];
    foreach ($files as $file) {
        $path = addImg($file);
        if ($path) {
            $arr[] = $path;
        } else {
            $arr[] = 'error';
        }
    }
    return $arr;
}

定义完成,在控制器中进行调用,代码如下,多余业务代码无需在意

 单图上传:

  //修改商城海报
    public function updateshopbanner()
    {
        $where = ['name' => 'shopbanner'];
        if (Request::instance()->isPost()) {
            $file = request()->file('file');//单个图片上传
            $re = addImg($file);
            $re = $this->configModel->db->where($where)->setField('content', $re);
            if ($re) {
                $this->success('修改成功', '', '', 1);
            } else {
                $this->error('修改失败');
            }
        }

        $rs = $this->configModel->db->where($where)->find();
        $this->assign('rs', $rs);
        return view();
    }

多图上传:

    //添加维修单
    public function add()
    {
        if ($this->request->isPost()) {
            $post = input('post.');
            $files = request()->file('image');//接收多个图片
            unset($post['image']);
            Db::startTrans();
            $post['addtime'] = date('Y-m-d H:i:s');
            $result = $this->repairModel->db->insertGetId($post);
            if (!empty($files)) {
                $repairpic = addImgs($files);//调用多个图片上传上传
                if (in_array('error', $repairpic)) {
                    Db::rollback();
                    die(json_encode(['status' => 2, 'msg' => '图片上传失败,请稍后再试!']));
                }
                $repair = [];
                foreach ($repairpic as $v) {
                    $arr = [
                        'url' => $v,
                        'repair_id' => $result,
                    ];
                    $re = $this->repairpicModel->db->insert($arr);
                    if (!$re) {
                        $repair[] = 'error';
                    }
                }
                if (in_array('error', $repair)) {
                    Db::rollback();
                    die(json_encode(['status' => 2, 'msg' => '报修失败']));
                }
            }
            if ($result) {
                Db::commit();
                die(json_encode(['status' => 1, 'msg' => '报修成功!']));
            } else {
                Db::rollback();
                die(json_encode(['status' => 2, 'msg' => '报修失败!']));
            }
        }
        $uid = session('exist')['id'];
        $repair = $this->repairModel->db->where('uid', $uid)->order('addtime desc')->limit(1)->find();

        return view('', ['uid' => $uid, 'repair' => $repair]);
    }

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值