找了半天資料,終於是搞定了YII2.0接入OSS對象存儲了。這裏假定你已經安裝了YII2.0,已經安裝的compose。
第一步:我們安裝下oss對象組件(也就是OSS的PHP API)控制檯進入到YII2.0的根目錄輸入:composer require aliyuncs/oss-sdk-php,然後就安裝,安裝好後再根目錄裏的verdor下有aliyuncs文件夾如圖:
這裏就已經安裝好OSS的對象存儲API了,接下來就是和YII2.0整合在一起。
第二部:在根目錄下新建common/components/兩個文件夾,然後在components文件夾裏面新建一個文件Aliyunoss.php,如圖
接着我們在配置文件配置這個組件:
'Aliyunoss' => [
'class' => 'app\common\components\Aliyunoss',
],
如圖:
這裏YII2.0定義一個組件就成功了,然後我們就在這個組件寫oss的API邏輯代碼,先配置下oss,在params文件裏配置OSS如圖:
四個參數在oss後臺可以找到。到這裏YII2.0和oss就整合好了。接下來就敲代碼.
第三部:在common/components/Aliyunoss文件裏寫如下代碼:
<?php
namespace app\common\components;
use Yii;
use yii\base\Component;
use OSS\OssClient;
use OSS\Croe\OssException;
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對象
}
//刪除文件/或文件夾
public function del_file()
{
$res = false;
$bucket = Yii::$app->params['oss']['bucket']; //獲取阿里雲oss的bucket
if (self::$oss->deleteObject($bucket, "wocao/")){
//調用deleteObject方法把服務器文件上傳到阿里雲oss
$res = true;
}
return $res;
}
//上傳文件
public function upload_file()
{
try
{
$bucket = Yii::$app->params['oss']['bucket'];
$a = self::$oss->uploadFile($bucket, time()."."."png", "kwk.png");
print_r($a);
echo "success";
}
catch(OssException $e)
{
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
}
//下載文件
public function down_file()
{
$localfile ="yuzengyuan."."jpg";
$options = array(
OssClient::OSS_FILE_DOWNLOAD => $localfile,
);
try
{
$bucket = Yii::$app->params['oss']['bucket'];
self::$oss->getObject($bucket, "1513585444.png", $options);
}
catch( OssException $e)
{
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK, " .$localfile. "\n");
}
//判斷是否存在文件
function doesObjectExist()
{
try{
$bucket = Yii::$app->params['oss']['bucket'];
$exist = self::$oss->doesObjectExist($bucket, $object);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
var_dump($exist);
}
//創建虛擬目錄
public function create_dir()
{
try
{
self::$oss->createObjectDir("budfesdfd", "dirrrr");
}
catch(OssException $e)
{
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
}
//刪除虛擬目錄
function createObjectDir()
{
try{
$bucket = Yii::$app->params['oss']['bucket'];
self::$oss->createObjectDir($bucket, "phpyuzengyuan");
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
}
//列出用戶所有的存儲空間
public function listBuckets()
{
$bucketList = null;
try{
$bucketListInfo = self::$oss->listBuckets();
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
$bucketList = $bucketListInfo->getBucketList();
foreach($bucketList as $bucket) {
echo $bucket->getLocation() . "<br>" . $bucket->getName() . "<br>" . $bucket->getCreatedate() . "<br>";
echo "<hr>";
}
}
//創建儲存空間
public function create_Bucket()
{
try
{
self::$oss->createBucket("budfesdfd");
}
catch(OssException $e)
{
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
echo "success";
}
//刪除存儲空間
function deleteBucket()
{
try{
self::$oss->deleteBucket("yuzengbdfds");
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
}
//判斷存儲空間是否存在
function doesBucketExist()
{
try {
$res = self::$oss->doesBucketExist("budfe1sdfd");
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
if ($res === true) {
print(__FUNCTION__ . ": OK" . "\n");
} else {
print(__FUNCTION__ . ": FAILED" . "\n");
}
}
}
然後在控制器裏就可以用了,需要引入aliyunoss.php的命名空間,然後調用就可以,如圖:
詳細API可以查看https://help.aliyun.com/document_detail/32099.html?spm=5176.doc32102.6.758.J6e3WE這裏