tp.hui.admin后台管理系统之单例模式整合阿里云oss存储

第三方接口 2414浏览 评论

thinkphp5.0整合阿里云oss存储

一、使用composer安装阿里云oss SDK,以windows为例,

  • windows安装composer就不用多说了,使用cmd 命令thinkphp5.0 vendor目录

  • composer require aliyuncs/oss-sdk-php

  • 安装完毕后,到vendor目录下看会有aliyuncs 目录image.png

二、登陆阿里云管理中心设置oss key以及secret【点击这里设置】!

三、登陆oss 创建一个bucket,不用多说!

四、编写oss类,我把我编写的大概发一下,大家可以直接拿去用,配置我写在数据库了,我从数据库读取,你可以写在配置文件中,自己略作修改,贴上代码!

<?php
// +----------------------------------------------------------------------
// | Created by [ PhpStorm ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 上海到啦网络科技有限公司.
// +----------------------------------------------------------------------
// | Create Time ( 2017/8/30 0030 - 下午 2:29)
// +----------------------------------------------------------------------
// | Author: tangyijun <251784425@qq.com>
// +----------------------------------------------------------------------
namespace app\extra;
use OSS\Core\OssException;
use OSS\OssClient;
class Oss{
    private static $instance;
    private $oss_config;
    private $put_object  = 'object'; //将文件写入oss
    private $upload_file = 'file';   //上传文件到oss
    
    /* 获取数据库oss配置,当然你可以自己写在该类中以变量定义
     * 构造方法为私有防止类被实例化
     */
    private function __construct(){
        $this->oss_config = getConfig();
    }
    /**
     * 克隆方法为私有,防止被克隆
     */
    private function __clone(){
        // TODO: Implement __clone() method.
    }
    
    //单例模式
    public static function getInstance(){
        if(!self::$instance instanceof  Oss){
            self::$instance = new self();
        }
        return self::$instance;
    }

    /**
     * @return array|OssClient
     * 创建oss对象
     */
    public function clientOss(){
        if(empty($this->oss_config['access_key_id']) || !isset($this->oss_config['access_key_id'])){
            return ['errorMsg' => '请在后台设置阿里云access key id'];
        }
        if(empty($this->oss_config['access_key_secret']) || !isset($this->oss_config['access_key_secret'])){
            return ['errorMsg' => '请在后台设置阿里云access key secret'];
        }
        if(empty($this->oss_config['endpoint']) || !isset($this->oss_config['endpoint'])){
            die('');
            return ['errorMsg' => '请在后台设置阿里云endpoint'];
        }
        try{
            $oss_client = new OssClient($this->oss_config['access_key_id'],$this->oss_config['access_key_secret'],$this->oss_config['endpoint']);
        }catch (OssException $e){
            return ['errorMsg' => $e->getMessage()];
        }
        return $oss_client;
    }

    /**
     * @param $oss_path    oss保存的文件路径(如果没有将会自动创建)
     * @param $file_path   本地文件的保存路径
     * @param $action      上传类型
     * @return array|bool
     */
    function ossUpload($oss_path,$file_path,$action){
        $oss_client = $this->clientOss(); 
        switch ($action){
            case $this->put_object === $action:
                try{
                    $content = file_get_contents($file_path);
                    $oss_client->putObject($this->oss_config['bucket'],$oss_path,$content);
                } catch(OssException $e) {
                    return ['errorMsg' => $e->getMessage()];
                }
                return true;
                break;
            case $this->upload_file === $action:
                try{
                    $oss_client->uploadFile($this->oss_config['bucket'],$oss_path,$file_path);
                }catch (OssException $e){
                    return ['errorMsg' => $e->getMessage()];
                }
                return true;
                break;
            default:
        }

        return true;
    }


}

五、调用,以文件写入为例,图片上传也一样

//创建连接
$client_oss = Oss::getInstance();
//调用方法
$res = $client_oss->ossUpload('nihao.txt','./uploads/aa.txt','object');

六、效果图

image.png


目前只做了文本写入,和文件上传,其他的有时间在做吧!



本文连接:http://www.phpbloger.com/article/39.html 文章都为原创,转载请注明出处!

相关文章