TP框架之上传

本文主要介绍在TP5.1框架下如何进行图片上传操作,包括单图和多图的上传,同时强调了对图片格式和大小的验证。在一些老版本的TP5项目中,虽然开发手册未提及getPathname()方法,但实际上它等同于当前文档中的getSaveName()方法。值得注意的是,getSaveName()返回的服务器文件地址在Windows平台上可能需要特殊处理才能正确显示图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TP5.1手册

https://www.kancloud.cn/manual/thinkphp5_1/354121

功能:图片上传,单图多图均可,校验图片格式大小

    // 上传多图 (图片上传name设置为imglist)
    // <input type="file" name="imglist[]" />
    public function uploadMore(){
        //调用上传方法,返回结果 20160820/42a79759f284b767dfcb2a0197904287.jpg
        $image = $this->upload( request()->userId,'imglist');
        for ($i=0; $i < count($image); $i++) { 
            //使用封装的公共方法getFileUrl,获取图片上传后返回的文件完整url,重新赋值
            $image[$i]['url'] = getFileUrl($image[$i]['url']);
        }
        return $image;
    }

        //多图上传
        if (is_array($files)) {
            // 多图上传
            $arr = [];
            foreach($files as $file){
                $res = $this->UploadEvent($file);
                if ($res['status']) {
                    $arr[] = [
                        'url'=>$res['data'],
                        'user_id'=>$userid
                    ];
                }
            }
            return $this->saveAll($arr);
        }
        // 单图上传
        if(!$files) TApiException('请选择要上传的图片',10000,200);
        // 单文件上传
        $file = $this->UploadEvent($files);
        // 上传失败
        if(!$file['status']) TApiException($file['data'],10000,200);
        // 上传成功,写入数据库
        return self::create([
            'url'=>$file['data'],
            'user_id'=>$userid
        ]);
    }

    // 上传单文件,上传验证
    static public function UploadEvent($files,$size = '2067800',$ext = 'jpg,png,gif',$path = 'uploads')
    {
        $info = $files->validate(['size'=>$size,'ext'=>$ext])->move($path);
        return [
            //使用getPathname()获取上传后的图片路径,手册中没有写该方法
            //推荐使用getSaveName()方法
            // getSaveName方法返回的是图片的服务器文件地址,并不能直接用于图片的URL地址,尤其在windows平台上必须做转换才能正常显示图片。

            'data'=> $info ? $info->getPathname() : $files->getError(),
            'status'=> $info ? true :false
        ];
    }

 

// 获取图片上传后返回的文件完整url
function getFileUrl($url='')
{
    if (!$url) return;
    //使用URL生成,url('地址表达式',['参数'],['URL后缀'],['域名'])
    // https://www.kancloud.cn/manual/thinkphp5_1/353977
    return url($url,'',false,true);
}

注意,一些老项目使用的是TP5框架,由于版本较早,更新很多,很多方法开发手册中已经去掉,但实际仍然可以使用,如:

getPathname()方法,获取上传后的图片路径,然而手册中并没有写该方法。

 

    getPathname()方法其实就是现在开发文档中规定的getSaveName()方法

     getSaveName方法返回的是图片的服务器文件地址,并不能直接用于图片的URL地址,尤其在windows平台上必须做转换才能正常显示图片。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值