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

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

author:咔咔

wechat:fangkangfk

直接撸代码,看步骤:

前期准备工作:

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

屏幕快照 2022-05-12 下午3.46.44.png

<?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层

屏幕快照 2022-05-12 下午3.47.11.png

<?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;
    }
}

屏幕快照 2022-05-12 下午3.47.32.png

相关文章
Layui 内置方法 - layer.msg(提示框)
Layui 内置方法 - layer.msg(提示框)
1213 0
|
4月前
|
存储 Ubuntu Linux
U盘安装Ubuntu20.04系统
以上就是分享的乌班图Ubuntu20.04桌面版安装教程,其实Ubuntu系统和Windows系统安装的方式基本差不多,安装方法大同小异,如果会安装Windows系统,那么Ubuntu系统基本看一遍就可以学会了,希望大家喜欢,请继续关注我的白家号了
|
SQL 监控 安全
浅析Waf优缺点:硬件Waf、软件Waf、云Waf之总结
Web应用防火墙(WAF)是一种专门针对Web应用攻击的防护产品,主要分为硬件WAF、软件WAF和云WAF三种形态。硬件WAF部署简便、防护范围广,但价格昂贵且存在误杀风险;软件WAF开箱即用、功能丰富,但可能占用较多内存,适合中小型网站;云WAF部署简单、维护成本低,但存在被绕过和数据泄露的风险。RASP(运行时应用自保护)是一种新兴的安全技术,通过将保护程序注入应用程序,实现实时检测和阻断攻击,具有低误报率、维护成本低等优势,但也面临部署困难和可能影响性能的问题。未来,WAF防护技术将朝着机器学习、词法分析、行为识别和大数据关联分析等方向发展。
1414 6
|
人工智能 小程序 Java
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
本文介绍了一款名为PyWxDump的开源工具,它可以获取微信账户信息、解密SQLite数据库以查看和备份聊天记录。此工具适用于已登录电脑版微信的用户,通过GitHub下载后简单几步即可操作。适合对数据恢复感兴趣的开发者,但请注意合法合规使用并尊重隐私。
2443 2
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
|
Java API Maven
SpringBoot+SeetaFace6搭建人脸识别平台
【10月更文挑战第8天】以下是使用Spring Boot和SeetaFace6搭建人脸识别平台的步骤:首先安装Java和Maven,下载SeetaFace6库并添加依赖;接着创建Spring Boot项目并在`pom.xml`中添加必要依赖;然后配置SeetaFace6参数;实现人脸识别服务类与控制器类;最后使用工具如Postman测试API接口及识别结果。示例代码展示了如何接收图像数据并进行人脸检测。可根据具体需求扩展更多功能,如用户管理和历史记录等。
1028 1
|
Oracle 关系型数据库 Java
银河麒麟v10安装达梦数据库
银河麒麟v10安装达梦数据库
1077 1
|
存储 缓存 监控
快速掌握Redis优化要点,告别性能瓶颈!
# Redis优化指南 了解如何提升Redis性能,从读写方式(整体与部分)、KV size、Key数量、读写峰值、命中率、过期策略、平均穿透加载时间、可运维性、安全性等方面着手。选择合适的读写策略,如只整体读写或部分读写变更,优化KV size避免过大或差异过大,合理管理Key数量,应对不同读写峰值,监控命中率并持续优化,设置智能过期策略,减少平均穿透加载时间,确保高可运维性并强化安全性。一起探索Redis的性能潜力!
2917 5
|
网络协议 Linux C++
Linux C/C++ 网络编程中地址格式转换(inet_pton和inet_ntop函数)
Linux C/C++ 网络编程中地址格式转换(inet_pton和inet_ntop函数)
1166 0
|
SQL 分布式计算 大数据
Hudi数据湖技术引领大数据新风口(三)解决spark模块依赖冲突
Hudi数据湖技术引领大数据新风口(三)解决spark模块依赖冲突
408 0
|
索引
Unreal Niagara粒子入门3 - 根据模型顶点发射粒子(上)
Unreal Niagara粒子入门3 - 根据模型顶点发射粒子
545 0
Unreal Niagara粒子入门3 - 根据模型顶点发射粒子(上)