【TP5项目统一规范】图片上传

author:咔咔

wechat:fangkangfk

直接撸代码,看步骤:

前期准备工作:

第一步:创建上传图片的配置文件

第二步:引入uoload这个工具类

<?php

namespace app\data\util;

class UploadUtil
{
    /**
     * @var 文件信息think\file这个类
     */
    private $file;
    /**
     * @var 上传图片的目录
     */
    private $path;
    /**
     * 上传文件规则
     */
    // protected $validate =[
    //     'size' => 500000,
    //     'ext'  => 'jpg,png,gif,jpeg',
    // ];

    /**
     * 文件上传
     *
     * @param file think\File
     * @path  上传的目录  upload\goods
     * @return array
     */
    public function move($file,$path)
    {
        $this->file = $file;
        // 获取上传的文件名
        $fileName = $this->getFileName($path);
        // 文件保存的地址
        $save = $this->getFilePath($path);
        // 判断保存的目录是否存在
        if(!file_exists($save)){
            mkdir($save,777,true);
        }
        // 文件保存后的名字加类型
        $image = $fileName['saveName'].'.'.$fileName['fileSuffix'];
        // 开始上传  参数一:上传路径       参数二:文件名
        $info = $file->validate(['size'=>20000000,'ext'=>'jpg,png,gif'])->move($save,$image);
        // 获取上传后的文件名
        $this->path = $path.'/'.$image;

        if($info){
            $resule = ['code'=>SUCCESS,'data'=>$this->path];
        }else{
            $resule = ['code'=>ERROR,'data'=>$file->getError()];
        }
        return $resule;
    }

    /**
     * 配置保存路径
     *
     * @return array
     */
    public function getFilePath($path)
    {
        return ROOT.'/'.$path;
    }

    /**
     * 获取上传文件的信息  名字,类型,类型
     *
     * @return array
     */
    public function getFileName()
    {
        // 获取文件信息
        $name = $this->file->getInfo('name');
        // 问件名1.jpg   所以需要转数组获取
        $fileName = explode('.',$name);
        return [
            // 文件名
            'formerlyName' => $fileName[0],
            // 保存后的文件名
            'saveName' => $fileName[0].time(),
            // 文件后缀
            'fileSuffix' => $fileName[1]
        ];
    }

    /**
     * 保存后的文件路径
     *
     * @return array
     */
    public function functionName($flag = true)
    {
        return ($flag) ? $this->path : ROOT.'/'.$this->path;
    }
}



控制器获取前端上传的图片信息

$param这个参数是为了获取图片放置位置,在下面就可以清楚的明白

$fileinfo是过去图片的信息,返回时think\File对象

控制器将这俩个参数传递给server层

在server层接收到图片信息,跟上传类型,进行数据组装,最后将参数返回给工具类

$type就是上传类型,如video

$path就是上传地址如:upload\video

uoload工具类,这套工具类只需要参数文件信息,跟上传地址,其余的的什么都不需要修改

<?php

namespace app\data\util;

class UploadUtil
{
    /**
     * @var 文件信息think\file这个类
     */
    private $file;
    /**
     * @var 上传图片的目录
     */
    private $path;
    /**
     * 上传文件规则
     */
    // protected $validate =[
    //     'size' => 500000,
    //     'ext'  => 'jpg,png,gif,jpeg',
    // ];

    /**
     * 文件上传
     *
     * @param file think\File
     * @path  上传的目录  upload\goods
     * @return array
     */
    public function move($file,$path)
    {
        $this->file = $file;
        // 获取上传的文件名
        $fileName = $this->getFileName($path);
        // 文件保存的地址
        $save = $this->getFilePath($path);
        // 判断保存的目录是否存在
        if(!file_exists($save)){
            mkdir($save,777,true);
        }
        // 文件保存后的名字加类型
        $image = $fileName['saveName'].'.'.$fileName['fileSuffix'];
        // 开始上传  参数一:上传路径       参数二:文件名
        $info = $file->move($save,$image);
        // 获取上传后的文件名
        $this->path = $path.'/'.$image;
        return ($info) ? $this->path : false;
    }

    /**
     * 配置保存路径
     *
     * @return array
     */
    public function getFilePath($path)
    {
        return ROOT.'/'.$path;
    }

    /**
     * 获取上传文件的信息  名字,类型,类型
     *
     * @return array
     */
    public function getFileName()
    {
        // 获取文件信息
        $name = $this->file->getInfo('name');
        // 问件名1.jpg   所以需要转数组获取
        $fileName = explode('.',$name);
        return [
            // 文件名
            'formerlyName' => $fileName[0],
            // 保存后的文件名
            'saveName' => $fileName[0].time(),
            // 文件后缀
            'fileSuffix' => $fileName[1]
        ];
    }

    /**
     * 保存后的文件路径
     *
     * @return array
     */
    public function functionName($flag = true)
    {
        return ($flag) ? $this->path : ROOT.'/'.$this->path;
    }
}



最终图片会上传到这里

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咔咔-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值