【PHP】TP上传图片到OSS
CrazyPanda发表于:2024-03-23 18:21:38浏览:400次
准备:
php版本:7.4
tp版本:6.0
阿里云accessKeyId;
阿里云accessKeySecret;
阿里云存储bucket名称,如 examplebucket;
地域节点endpoint,如:oss-cn-hangzhou.aliyuncs.com;
1. 安装SDK
这里我们使用composer安装
composer require aliyuncs/oss-sdk-php
下载后composer.json文件里面显示
"aliyuncs/oss-sdk-php": "^2.7"
2. 上传文件到OSS
SDK提供了好几种上传文件的方法
直接上传文件对象
/** * Uploads a local file * * @param string $bucket bucket name * @param string $object object name * @param string $file local file path * @param array $options * @return array|null * @throws OssException|RequestCore_Exception */ public function uploadFile($bucket, $object, $file, $options = NULL)
上传文件内容
/** * Uploads object from file handle * * @param string $bucket bucket name * @param string $object object name * @param resource $handle file handle * @param array $options * @return array|null * @throws OssException|RequestCore_Exception */ public function uploadStream($bucket, $object, $handle, $options = NULL)
结合我们的业务需要,因为客户端直接上传的是文件对象,所有我们采用uploadFile方法。
uploadFile参数说明:
第一个参数bucket:存储空间bucket的名称
第二个参数object:存储文件的名称(原以为是文件对象,实际上是存储文件的名称,可以包含路径,比如 '2024/01/01/xxx.png')
第三个参数file:文件的本地路径,根据这个路径获取文件,并上传保存到第二个参数对应的文件
封装的上传文件类
<?php namespace app\service; use app\model\SysConfig; use OSS\Core\OssException; use OSS\OssClient; use think\facade\Log; class OssService { private $accessKeyId = ''; private $accessKeySecret = ''; private $bucket = ''; private $endpoint = ''; /** * 构造方法 * @access public * @param App $app 应用对象 */ public function __construct() { $this->accessKeyId = SysConfig::get('accessKeyId'); $this->accessKeySecret = SysConfig::get('accessKeySecret'); $this->bucket = SysConfig::get('bucket'); $this->endpoint = SysConfig::get('endpoint'); } /** * 上传文件 * @param $file_path 文件路径 * @param $file_name 文件名称 * @return mixed|string * @throws \OSS\Http\RequestCore_Exception */ public function save($file_path,$file_name) { try { //实例化 $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint); //生成文件名 连接后缀 $save_name = date('Y').'/'.date('m').'/'.date('d') .'/'. $file_name; //Log::info($save_name); //执行阿里云上传 $result = $ossClient->uploadFile($this->bucket, $save_name, $file_path); //Log::info($result); if (!empty($result['info']['url'])) { return $result['info']['url']; } } catch (OssException $e) { //Log::info($e->getMessage()); } return ''; } }
上传文件接口
public function addImg($cid) { $file = $this->request->file('file'); $files = $_FILES['file']; $oss = new OssService(); $file_name = md5($file->getOriginalName()) . '.' . $file->getOriginalExtension(); $tmp_name = $files['tmp_name'];//上传文件的缓存路径 $url = $oss->save($tmp_name,$file_name); if (!empty($url)) { $this->success('成功',['url' => $url]); } else { $this->error('失败'); } }
已上就是本次tp使用阿里云SDK上传OSS的操作。
后记
原想只是一个简单上传,想要直接使用阿里云提供的API,但是API里面一些签名什么的还要花时间做,最终还是选择了使用SDK更快捷方便。
猜你喜欢
- 【PHP】步骤详解Centos中编译安装php8与配置方法
- 本篇文章给大家带来了关于php的相关知识,其中主要介绍了在Centos系统中是如何编译安装php,以及如何正确配置的,步骤很详细!感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。PHP(全称:PHP:Hypertext Preprocessor,即“PHP:超文本预处理器”)是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用。PHP的语法借鉴吸收C语言、Java和Perl等流行计算机语言的特点,易于一般程序员学习。PHP的主要目标是允许网络开发人员快速编写动态页面。准备工
- 【PHP】php8为什么性能高
- hp8性能高的原因:php8引入了JIT编译器、优化了函数调用、数组操作、引入了新的数据结构和算法,并修复和优化了一些内部实现细节等等。详细介绍:1、引入了Just-In-Time(JIT)编译器,JIT编译器是一种动态编译技术,它将PHP代码转换为机器码,以便更高效地执行;2、优化了函数调用,在PHP8中,通过引入函数调用的内联缓存(IC)机制,可以避免昂贵的开销等等。本教程操作系统:windows10系统、PHP8版本、Dell G3电脑。PHP是一种广泛使用的服务器端脚本语言,用于开发W
- 【PHP】PHP中的堆和栈的概念及其应用
- hp作为一门非常流行的编程语言,其对于数据结构的处理和使用具有非常重要的作用。而在php中,堆和栈是两种非常重要的数据结构,它们在程序设计和实现中有着重要的应用价值。本文将从概念和应用两方面介绍php中的堆和栈。一、堆和栈的概念堆堆是一种数据结构,它是一种特殊的树形结构。在PHP中,堆是由节点和边组成的一种图形式的数据结构。堆中每个节点都有一个值,并且每个节点的值都满足一定的关系,即父节点的值大于等于子节点的值(大根堆)或父节点的值小于等于子节点的值(小根堆)。在PHP中,堆通常是用来进行高效
- 【PHP】php生僻字处理方法
- 在日常的PHP编程中,我们难免会遇到一些中文生僻字,这些字虽然不常用,但在一些特定的场合下却是必须要用到的。下面我们就来探讨一下PHP处理生僻字的几种方法。一、使用Unicode编码Unicode是一种国际化字符集,它可以表示几乎所有的字符,包括中文生僻字。在PHP中,使用Unicode编码处理生僻字,一般需要使用PHP内置函数chr()和ord()。chr()函数chr()函数可以将一个Unicode码转换为对应的字符,其语法如下:string chr(int $
- 【PHP】php将字符串拆分成数组有哪些方法
- 方法有:1、explode()函数,可以将字符串按指定的分隔符拆分成数组;2、str_split()函数,可以将字符串拆分成单个字符的数组;3、preg_split()函数,可以根据正则表达式将字符串拆分成数组;4、sscanf()函数,可以根据指定的格式解析字符串,并将解析结果存入数组中;5、字符串截取方法,通过使用字符串截取函数,可以将字符串按指定长度拆分成数组等。本教程操作系统:Windows10系统、PHP8.1.3版本、Dell G3电脑。在PHP中,将字符串拆分成数组有多种
- 【PHP】PHP 8.3 大升级:20 个新特性全面解析
- PHP 8.3 是流行的服务器端脚本语言的最新版本,带来了许多新功能和改进,旨在简化 Web 开发并提高性能。这些增强功能包括只读类、新函数 json_validate() 、Randomizer 类的扩展以及更合适的日期/时间异常。它们将彻底改变 PHP 开发体验,使其更加高效、安全,以满足 Web 开发人员和企业的需求。1. Readonly 类改进PHP 8.3 对只读类进行了重大改进,使开发人员能够更灵活地控制其代码。其中一个显著的变化是允许在克隆时重新初始化只读属性,解决了特
- 【PHP】TP使用Intervention\Image在图片上绘制矩形、文字
- 1. 在图片上绘制矩形use Intervention\Image\ImageManagerStatic as Image; public function drawRectangle() { $image = Image::make('path/to/your/image.jpg'); // 替换为你的图片路径 &
- 【PHP】php网络服务器有哪些软件
- php网络服务器有Apache HTTP Server、Nginx、Microsoft Internet Information Services、Lighttpd和Caddy等。详细介绍:1、Apache HTTP Server,Apache是最流行的开源Web服务器软件之一,广泛应用于PHP开发,它稳定、可靠,支持多平台,具有丰富的功能和灵活的配置选项;2、Nginx等等。本教程操作系统:windows10系统、PHP 8.1.3版本、DELL G3电脑。在PHP开发中,常用的网络