王朝235网址导航
立即发布
当前位置:首页 > TP代码 > 正文
文章资讯分类

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

  • 时间:2022-06-22
  • 作者:王朝235导航
  • 阅读:102 次

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

先在文件头部使用命名空间think\File

封装单图片上传和多图片上传方法

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]);
    }


王朝235网址导航版权声明:

1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

2、本站仅提供信息发布平台,不承担相关法律责任。

3、若侵犯您的版权或隐私,请联系本站管理员删除。

4、若文章存在违法信息,请举报