OSS云存儲
安裝
composer require easyswoole/oss
阿里云調用
根據阿里云官方sdk修改,全部方法都一致,走通了所有官方的client請求類單元測試,全部調用方法都和阿里云一致 文檔可查看阿里云官方文檔:https://help.aliyun.com/document_detail/32099.html?spm=a2c4g.11186623.2.17.de715d26YNLCah#concept-32099-zh
<?php
/**
* Created by PhpStorm.
* User: Tioncico
* Date: 2019/11/20 0020
* Time: 15:28
*/
include "./vendor/autoload.php";
include "./phpunit.php";
go(function (){
$config = new \EasySwoole\Oss\AliYun\Config([
'accessKeyId' => ACCESS_KEY_ID,
'accessKeySecret' => ACCESS_KEY_SECRET,
'endpoint' => END_POINT,
]);
$client = new \EasySwoole\Oss\AliYun\OssClient($config);
$data = $client->putObject('tioncicoxyz','test',__FILE__);
var_dump($data);
});
部分方法沒走通單元測試
由于有些方法可能是測試環境問題,未走通,可能出現問題(一般不會有問題),需要大家注意
列出走不通單元測試的方法,以供大家參考:
- addBucketCname 提示: NoSuchCnameInRecord: No such cname be found in record
- testDeleteCname 提示: CnameDenied: The cname belongs to another user.
以下2個方法為callback走不通,應該不影響
- \EasySwoole\Oss\Tests\AliYun\CallbackTest::testMultipartUploadCallbackNormal 提示: CallbackFailed: Response body is not valid json format.
- \EasySwoole\Oss\Tests\AliYun\CallbackTest::testPutObjectCallbackNormal 走不通
Symlink 類方法全走不通,應該不影響,提示: bucket is not allowed empty或者The specified key does not exist.
七牛云調用
根據七牛云官方sdk修改,走通了oss的大部分單元測試,用法和七牛云oss完全一致
操作文檔可直接查看七牛云官方文檔 https://developer.qiniu.com/kodo/sdk/1241/php
include "../../vendor/autoload.php";
include "../../phpunit.php";
go(function (){
$auth = new \EasySwoole\Oss\QiNiu\Auth(QINIU_ACCESS_KEY,QINIU_SECRET_KEY);
$key = 'formPutFileTest';
$token = $auth->uploadToken('tioncico', $key);
$upManager = new \EasySwoole\Oss\QiNiu\Storage\UploadManager();
list($ret, $error) = $upManager->putFile($token, $key, __file__, null, 'text/plain', null);
var_dump($ret,$error);
});
部分方法沒走通單元測試
由于某些可能是測試環境問題,有部分方法未走通單元測試,需要大家注意,列出走不通的單元測試的方法,以供大家參考
- \EasySwoole\Oss\Tests\QiNiu\BucketTest::testPrefetch 未走通,提示:{"error":"bucket source not set"}
- PfopTest 類方法未走通,提示{"error":"no such bucket"}
- \EasySwoole\Oss\Tests\QiNiu\ResumeUpTest::test4ML2 方法未走通,一直卡住,不建議使用該方法上傳文件,請使用 \EasySwoole\Oss\Tests\QiNiu\ResumeUpTest::test4ML 方法上傳
七牛云設置超時
官方sdk沒有設置超時的邏輯,在本組件中新增加了,設置方法如下:
\EasySwoole\Oss\QiNiu\Config::setTimeout(3);
\EasySwoole\Oss\QiNiu\Config::setConnectTimeout(5);
騰訊云調用
騰訊云調用和原來的方法基本一致,操作文檔可直接查看騰訊云官方文檔:https://cloud.tencent.com/document/product/436/12266
<?php
include "../../vendor/autoload.php";
include "../../phpunit2.php";
go(function (){
//config配置
$config = new \EasySwoole\Oss\Tencent\Config([
'appId' => TX_APP_ID,
'secretId' => TX_SECRETID,
'secretKey' => TX_SECRETKEY,
'region' => TX_REGION,
'bucket' => TX_BUCKET,
]);
//new客戶端
$cosClient = new \EasySwoole\Oss\Tencent\OssClient($config);
$key = '你好111.txt';
//生成一個文件數據
$body = generateRandomString(2 * 1024 + 1023);
//上傳
$cosClient->upload($bucket = TX_BUCKET,
$key = $key,
$body = $body,
$options = ['PartSize' => 1024 + 1]
);
//獲取文件內容
$rt = $cosClient->getObject(['Bucket' => TX_BUCKET, 'Key' => $key]);
var_dump($rt['Body']->__toString());
});
function generateRandomString($length = 10)
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
補充
大部分方法已經兼容,使用方法和騰訊云官方完全一致,但還有些注意事項:
- 上傳文件使用了
SplStream
作為流文件管理 - 下載文件使用了
SplStream
作為流文件管理(上面的$rt['Body']就是SplStream
對象)
部分方法沒走通單元測試
由于騰訊云sdk使用了guzzle 庫,改動非常麻煩,所以有部分單元測試沒通過,具體方法如下,希望大家注意:
- PutBucketAcl 方法,相關的單元測試全部提示Access Denied.(官方sdk也這個提示)
- copy 方法,小文件提示You have no authority to read the source file 大文件直接無法走通無法使用(官方sdk也走不通)