yii2.0整合阿里云oss php sdk(一) [ 2.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
安装完成以后,如下图
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 调用成功截图:
至此,已经成功地把阿里云oss引入到了yii2框架之中。调用upload方法和调用delete方法跟示例相同。你也可以根据OssClient里边的方法为Aliyunoss组件增加新的功能。一般来说,使用上传和删除功能就已经能满足大部分需求了。下一篇文章,将会介绍使用阿里云oss上传图片,敬请期待。
weinirumo
注册时间:2016-11-24
最后登录:2023-02-21
在线时长:43小时6分
最后登录:2023-02-21
在线时长:43小时6分
- 粉丝17
- 金钱6670
- 威望50
- 积分7600
热门源码
- 基于 Yii 2 + Bootstrap 3 搭建一套后台管理系统 CMF
- 整合完 yii2-rbac+yii2-admin+adminlte 等库的基础开发后台源码
- 适合初学者学习的一款通用的管理后台
- yii-goaop - 将 goaop 集成到 Yii,在 Yii 中优雅的面向切面编程
- yii-log-target - 监控系统异常且多渠道发送异常信息通知
- 店滴云1.3.0
- 面向对象的一小步:添加 ActiveRecord 的 Scope 功能
- Yii2 开源商城 FecShop
- 基于 Yii2 开发的多店铺商城系统,免费开源 + 适合二开
- leadshop - 基于 Yii2 开发的一款免费开源且支持商业使用的商城管理系统
共 11 条评论
第二篇的链接
http://www.yiichina.com/code/1079
能不能把源代码分享一下啊?这个分享一段一段的,不成体系,看着头疼
你静下心来,认认真真的按照我写的步骤做一遍,就能理解了。如果还是没理解,把你的邮箱私信发给我,我把源码发给你
支持,正好需要这个
你好!我现在需要加载个SDK短信云片的 怎么弄呢
composer完就死了....到处报错.. 好想哭
具体报的什么错啊?
是我的原因,有一个helper没有autoload... 已经在composer.json里加上了,谢谢
你好 我想问一下 这个bucket 是在哪里? 我这边一直报错:InvalidBucketName: The specified bucket is not valid.
你看一下这篇文章的3.3,把配置文件放到params.php文件里就好了
我的直接报错:
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;
我的在basic/config/main.php里边添加一个组件配置
'Aliyunoss' => [ 'class' => 'app\components\Aliyunoss', ],
我写在我的在basic/config/web.php里面了,跟这个有关系么?谢谢!
我的在basic/config/main.php里边添加一个组件配置
'Aliyunoss' => [ 'class' => 'app\components\Aliyunoss', ],
我写在我的在basic/config/web.php里面了,跟这个有关系么?谢谢!
这个配置要写到components里边
'components' => ['Aliyunoss' => [ 'class' => 'common\components\Aliyunoss', ],]
@565086101 这样写就不会报错了
问题找到了,感谢文章
你好为什么我这边一直报
PHP Fatal Error – yii\base\ErrorException Class 'OSS\OssClient' not found
我按你的方法走的
命名空间的问题吧,是不是没有引入正确?
@weinirumo 我也是这个报错 请问哪里错了
感谢指导 感谢提供思路,正好再做oss项目 受教了
Class 'OssClient' not found
我是按教程一步步来的 怎么 使用的时候 没有呢
"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}" ]
bucket不存在