weinirumo 2016-11-25 15:06:04 17090次浏览 11条评论 24 5 0

主要思路,首先用composer下载阿里云oss的php sdk,然后自定义一个组件,就能够在全局调用阿里云oss了。
具体步骤如下:

1 到阿里云官网找到php sdk,网址为https://help.aliyun.com/document_detail/32099.html?spm=5176.87240.400427.40.s8EbEH

2 使用composer安装,在项目目录下(basic/)输入:

composer require aliyuncs/oss-sdk-php

安装完成以后,如下图
阿里云oss sdk.png

3 自定义组件:

3.1 在basic目录下,创建components文件夹,

3.2 在components目录下创建Aliyunoss.php
代码参考如下:

<?php
namespace app\components;

use Yii;
use yii\base\Component;
use OSS\OssClient;

class Aliyunoss extends Component
{
    public static $oss;

    public function __construct()
    {
        parent::__construct();
        $accessKeyId = Yii::$app->params['oss']['accessKeyId'];                 //获取阿里云oss的accessKeyId
        $accessKeySecret = Yii::$app->params['oss']['accessKeySecret'];         //获取阿里云oss的accessKeySecret
        $endpoint = Yii::$app->params['oss']['endPoint'];                       //获取阿里云oss的endPoint
        self::$oss = new OssClient($accessKeyId, $accessKeySecret, $endpoint);  //实例化OssClient对象
    }

    /**
     * 使用阿里云oss上传文件
     * @param $object   保存到阿里云oss的文件名
     * @param $filepath 文件在本地的绝对路径
     * @return bool     上传是否成功
     */
    public function upload($object, $filepath)
    {
        $res = false;
        $bucket = Yii::$app->params['oss']['bucket'];               //获取阿里云oss的bucket
        if (self::$oss->uploadFile($bucket, $object, $filepath)) {  //调用uploadFile方法把服务器文件上传到阿里云oss
            $res = true;
        }

        return $res;
    }

    /**
     * 删除指定文件
     * @param $object 被删除的文件名
     * @return bool   删除是否成功
     */
    public function delete($object)
    {
        $res = false;
        $bucket = Yii::$app->params['oss']['bucket'];    //获取阿里云oss的bucket
        if (self::$oss->deleteObject($bucket, $object)){ //调用deleteObject方法把服务器文件上传到阿里云oss
            $res = true;
        }

        return $res;
    }

    public function test(){
        echo 123;
        echo "success";
    }
}
?>

3.3 在basic/config/params.php里边添加一个数组,用来放置阿里云oss的配置信息
代码参考如下:

'oss' =>[
        'accessKeyId'=>'您的accessKeyId',
        'accessKeySecret'=>'您的accessKeySecret',
        'bucket' => '您的bucket',
        'endPoint' => '您的endPoint',
    ]

3.4 在basic/config/main.php里边添加一个组件配置

'Aliyunoss' => [
    'class' => 'app\components\Aliyunoss',
],

3.5 在controller里边尝试调用

Yii::$app->Aliyunoss->test();

3.6 调用成功截图:
自定义组件.png

至此,已经成功地把阿里云oss引入到了yii2框架之中。调用upload方法和调用delete方法跟示例相同。你也可以根据OssClient里边的方法为Aliyunoss组件增加新的功能。一般来说,使用上传和删除功能就已经能满足大部分需求了。下一篇文章,将会介绍使用阿里云oss上传图片,敬请期待。

觉得很赞
  • 评论于 2016-11-26 10:17 举报
    , 觉得很赞
  • 评论于 2017-01-01 21:43 举报

    能不能把源代码分享一下啊?这个分享一段一段的,不成体系,看着头疼

    1 条回复
    评论于 2017-01-05 09:37 回复

    你静下心来,认认真真的按照我写的步骤做一遍,就能理解了。如果还是没理解,把你的邮箱私信发给我,我把源码发给你

  • 评论于 2017-01-10 16:01 举报

    支持,正好需要这个

  • 评论于 2017-01-17 15:52 举报

    你好!我现在需要加载个SDK短信云片的 怎么弄呢

  • 评论于 2017-02-13 16:11 举报

    composer完就死了....到处报错.. 好想哭

    2 条回复
    评论于 2017-02-14 09:27 回复

    具体报的什么错啊?

    评论于 2017-02-14 10:20 回复

    是我的原因,有一个helper没有autoload... 已经在composer.json里加上了,谢谢

  • 评论于 2017-02-14 15:48 举报

    你好 我想问一下 这个bucket 是在哪里? 我这边一直报错:InvalidBucketName: The specified bucket is not valid.

    6 条回复
    评论于 2017-02-14 16:20 回复

    你看一下这篇文章的3.3,把配置文件放到params.php文件里就好了

    评论于 2017-08-01 17:29 回复

    我的直接报错:

    PHP Fatal Error – yii\base\ErrorException
    
    Call to a member function test() on a non-object
    

    是不是我Aliyunoss.php这里面的路径不对呢?:

    namespace app\components;
    
    use Yii;
    use yii\base\Component;
    use OSS\OssClient;
    
    评论于 2017-08-01 17:33 回复

    我的在basic/config/main.php里边添加一个组件配置

    'Aliyunoss' => [
        'class' => 'app\components\Aliyunoss',
    ],
    

    我写在我的在basic/config/web.php里面了,跟这个有关系么?谢谢!

    评论于 2017-08-01 17:33 回复

    我的在basic/config/main.php里边添加一个组件配置

    'Aliyunoss' => [
        'class' => 'app\components\Aliyunoss',
    ],
    

    我写在我的在basic/config/web.php里面了,跟这个有关系么?谢谢!

    评论于 2017-08-02 16:17 回复

    这个配置要写到components里边

    'components' => ['Aliyunoss' => [
        'class' => 'common\components\Aliyunoss',
    ],]
    
    评论于 2017-08-02 16:17 回复

    这样写就不会报错了

  • 评论于 2017-07-12 11:07 举报

    问题找到了,感谢文章

  • 评论于 2017-09-15 17:18 举报

    你好为什么我这边一直报

    PHP Fatal Error – yii\base\ErrorException
    
    Class 'OSS\OssClient' not found
    

    我按你的方法走的

    2 条回复
    评论于 2017-09-16 17:11 回复

    命名空间的问题吧,是不是没有引入正确?

    评论于 2020-07-27 10:26 回复

    我也是这个报错 请问哪里错了

  • 评论于 2017-12-11 23:28 举报

    感谢指导 感谢提供思路,正好再做oss项目 受教了

  • 评论于 2018-07-18 10:30 举报

    Class 'OssClient' not found

    1 条回复
    评论于 2018-07-18 10:30 回复

    我是按教程一步步来的 怎么 使用的时候 没有呢

  • 评论于 2020-05-11 18:29 举报
    "name": "Exception",
    "message": "\"liewu.oss-accelerate.aliyuncs.com\"bucket name is invalid",
    "code": 0,
    "type": "OSS\\Core\\OssException",
    "file": "/www/wwwroot/liewu/vendor/aliyuncs/oss-sdk-php/src/OSS/OssClient.php",
    "line": 2267,
    "stack-trace": [
    	"#0 /www/wwwroot/liewu/vendor/aliyuncs/oss-sdk-php/src/OSS/OssClient.php(2043): OSS\\OssClient->authPrecheckBucket(Array)",
    	"#1 /www/wwwroot/liewu/vendor/aliyuncs/oss-sdk-php/src/OSS/OssClient.php(1180): OSS\\OssClient->auth(Array)",
    	"#2 /www/wwwroot/liewu/common/components/Aliyunoss.php(42): OSS\\OssClient->uploadFile('liewu.oss-accel...', 'goods/1.jpg', '/www/wwwroot/li...')",
    	"#3 /www/wwwroot/liewu/frontend/modules/goods/controllers/ReleaseController.php(20): common\\components\\Aliyunoss->upload('goods/1.jpg', '/www/wwwroot/li...')",
    	"#4 [internal function]: frontend\\modules\\goods\\controllers\\ReleaseController->actionSubmit()",
    	"#5 /www/wwwroot/liewu/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)",
    	"#6 /www/wwwroot/liewu/vendor/yiisoft/yii2/base/Controller.php(157): yii\\base\\InlineAction->runWithParams(Array)",
    	"#7 /www/wwwroot/liewu/vendor/yiisoft/yii2/base/Module.php(528): yii\\base\\Controller->runAction('submit', Array)",
    	"#8 /www/wwwroot/liewu/vendor/yiisoft/yii2/web/Application.php(103): yii\\base\\Module->runAction('goods/release/s...', Array)",
    	"#9 /www/wwwroot/liewu/vendor/yiisoft/yii2/base/Application.php(386): yii\\web\\Application->handleRequest(Object(yii\\web\\Request))",
    	"#10 /www/wwwroot/liewu/frontend/web/index.php(17): yii\\base\\Application->run()",
    	"#11 {main}"
    ]
    
    1 条回复
    评论于 2020-12-31 00:28 回复

    bucket不存在

您需要登录后才可以评论。登录 | 立即注册