您的当前位置:首页>全部文章>文章详情

【PHP】TP上传图片到OSS

CrazyPanda发表于:2024-03-23 18:21:38浏览:392次TAG:

准备:

php版本:7.4

tp版本:6.0

阿里云accessKeyId;

阿里云accessKeySecret;

阿里云存储bucket名称,如 examplebucket;

地域节点endpoint,如:oss-cn-hangzhou.aliyuncs.com;


1. 安装SDK

参考官网https://help.aliyun.com/zh/oss/developer-reference/installation-13?spm=a2c4g.11186623.0.0.568f6583XllxTu

这里我们使用composer安装

composer require aliyuncs/oss-sdk-php

下载后composer.json文件里面显示

"aliyuncs/oss-sdk-php": "^2.7"


2. 上传文件到OSS

参考官网:https://help.aliyun.com/zh/oss/developer-reference/simple-upload?spm=a2c4g.11186623.0.0.75b95347Cv3irf

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】RESTfulAPI详解
1. 什么是RESTfulAPIRESTful API 是一种互联网软件架构的设计规范,设计指南,设计风格,设计原则(类似于web标准,并不是标准【规范,原则】)2. 产生背景开始开发时,前后端高度融合(耦合) 近些年:前后端分离,前端各种客户端产生。基于这种现状,需要一个统一的机制。为前后端通信服务(API机制) 因此,前后端分离开来前后端基于API 开发,即:面向接口开发 前后端基于接口传递数据。 RESTfulAPI作为制定接口标准的规范而产生了。3. RESTful APIAPI简介:
发表于:2024-05-24 浏览:267 TAG:
【PHP】PHP面试题
1.详述一次完整的HTTP请求过程这个问题的核心是域名解析和服务器(nginx)解析这两部分,基本上这两部分详细阐述就可以了。步骤一、解析URL浏览器会解析当前的URL数据,判断此URL是否为合法的链接。如果是合法链接则正常的向下一步骤前进。如果不是合法的链接,则会执行搜索功能,例如执行百度、360、Google搜索等。步骤二、解析域名服务器是以ip的形式存在的。而域名需要解析到ip上,解析IP会有三个小的步骤:1)、从浏览器自身的缓存中解析此域名数据2)、从本地电脑的HOST文件中解析域名3)
发表于:2024-05-20 浏览:294 TAG:
【PHP】PHP8.1新特性大讲解之initializers初始化器
PHP 8.1:初始化器(new in initializers)PHP 8.1 添加了一个看似很小的细节,但我认为它会对许多人产生重大的日常影响。那么这个“初始化器 RFC 中的新内容”是关于什么的?我们来看一个例子;我们都写过这样的代码:class&nbsp;MyStateMachine { &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;__construct( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;n
发表于:2024-01-04 浏览:307 TAG:
【PHP】什么是微服务架构
随着互联网的不断发展,越来越多的网站和应用程序应运而生。而对于开发者来说,如何快速高效地构建应用程序,是一个重要的挑战。其中,微服务架构已经成为了一个越来越受欢迎的解决方案。而php作为一种最受欢迎的web开发语言之一,也已经成为了很多开发者在构建微服务架构时的首选语言。本文将为大家介绍PHP如何应用于微服务架构,帮助大家更好地理解微服务架构以及如何使用PHP构建高效的微服务应用程序。什么是微服务架构?微服务架构(Microservices Architecture)是一种构建分布式应用程序的软
发表于:2024-05-23 浏览:288 TAG:
【PHP】linux系统php怎么安装curl扩展
有时候安装好php后,后面需要一些扩展需要添加进来,又不能影响当前php的工作,我们就只能通过动态添加扩展来实现。php安装curl扩展的方法:一.首先明确一些目录1.源码包目录,就是放从网上下载的源码包文件的目录,里面有下载的php,mysql,http等源码例如:/usr/local/src/&nbsp; 2.PHP扩展包路径,就是PHP用来支持扩展服务的软件包,一般在php源码包的ext目录例如:/usr/local/src/php-7.0.12/ext/二. 开始动手安装1.安装curl
发表于:2024-03-19 浏览:286 TAG:
【PHP】PHP实现验证码的生成与验证
PHP是一种常用的服务器端脚本语言,不仅功能强大,而且易于学习和编写。在网站开发中,验证码的生成与验证是非常重要的安全措施。在这篇文章中,我们将介绍如何使用PHP实现验证码的生成与验证。一、什么是验证码?验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写。它是一种常见的在线验证机制,用于确保用户是真正的人而不是机器人。
发表于:2023-12-28 浏览:277 TAG:
【PHP】TP使用Intervention\Image在图片上绘制矩形、文字
1. 在图片上绘制矩形use&nbsp;Intervention\Image\ImageManagerStatic&nbsp;as&nbsp;Image; &nbsp; public&nbsp;function&nbsp;drawRectangle() { &nbsp;&nbsp;&nbsp;&nbsp;$image&nbsp;=&nbsp;Image::make(&#39;path/to/your/image.jpg&#39;);&nbsp;//&nbsp;替换为你的图片路径 &nbsp; &amp;
发表于:2024-04-12 浏览:364 TAG:
【PHP】php常用的第三方类库有哪些
php常用的第三方类库有Laravel、Symfony、Guzzle、PHPUnit、Monolog、Swift Mailer、PHPExcel、Carbon、Doctrine、PHPMailer等。详细介绍:1、Laravel是一个流行的PHP框架,提供了丰富的功能和工具,用于快速构建Web应用程序,它包含了许多常用的类库,例如路由、数据库访问、模板引擎、身份验证等等。本教程操作系统:windows10系统、PHP 8.1.3版本、DELL G3电脑。在PHP开发中,有许多常用的第三
发表于:2023-12-04 浏览:632 TAG:
【PHP】php二进制转换函数
在进行某些数据处理时,我们可能需要将十进制数字转换成二进制或将二进制数字转换为十进制。在PHP中,我们可以通过一些内置函数来完成这些转换操作。一、十进制转二进制在PHP中,我们可以使用decbin()函数将十进制数字转换成二进制。例如,在下面的示例中,我们将十进制数字29转换成二进制数字:$decimal_number&nbsp;=&nbsp;29; $binary_number&nbsp;=&nbsp;decbin($decimal_number); echo&nbsp;$binar
发表于:2023-12-29 浏览:272 TAG:
【PHP】php设计问答系统有哪些
php设计问答系统有Stack Overflow、Quora、Yahoo Answers、Quizzr等等。详细介绍:1、Stack Overflow,允许用户提问、回答问题,并通过投票机制评估答案的质量,提供了丰富的标签和搜索功能,使用户能够快速找到相关问题和答案;2、Quora,提供了丰富的社交功能,如关注话题、关注用户和私信交流等;3、Yahoo Answers等等。本教程操作系统:windows10系统、PHP8.1.3版本、Dell G3电脑。PHP设计问答系统是一种基于PH
发表于:2023-12-04 浏览:258 TAG: