1、开发准备
1.1、腾讯云对象存储术语
名称 | 说明 |
---|
APPID | 开发者访问 COS 服务时拥有的用户维度唯一资源标识,用以标识资源 |
SecretId | 开发者拥有的项目身份识别 ID,用以身份认证 |
SecretKey | 开发者拥有的项目身份密钥 |
Bucket | COS 中用于存储数据的容器 |
Region | 域名中的地域信息。枚举值参见 可用地域 文档,如:ap-beijing, ap-hongkong, eu-frankfurt 等 |
1.2、将腾讯官方提供的PHP SDK引入到项目中
composer require qcloud/cos-sdk-v5
2、开始开发
2.1、配置.env
COS_REGION=ap-shanghai
COS_KEY=xxx
COS_SECRET=xxx
COS_BUCKET=xxx
COS_APPID=xxx
2.2、使用PHP SDK中提供的对象存储客户端类
use Qcloud\Cos\Client;
2.3、初始化客户端对象
$cosClient = new Client(['region' => env('COS_REGION'),
'credentials' => ['secretId' => env('COS_KEY'), 'secretKey' => env('COS_SECRET')]]);
2.4、简单文件上传
参数名称 | 描述 |
---|
Bucket | Bucket 名称,由数字和小写字母以及中划线 "-" 构成 |
Body | 上传文件的内容,可以为文件流或字节流 |
Key | 对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 bucket1-1250000000.cos.ap-guangzhou.myqcloud.com/doc1/pic1.jpg 中,对象键为 doc1/pic1.jpg |
ACL | 设置文件的 ACL,如 'private,public-read','public-read-write' |
try {
$result = $cosClient->putObject([
'Bucket' => env('COS_BUCKET') . '-' . env('COS_APPID'),
'Key' => 'activity/worldcup/123.jpg',
'Body' => fopen('./res/activity/worldcup/123.jpg', 'rb')]);
$result = $result->toArray();
return ['code' => 0, 'msg' => '上传成功', 'data' => urldecode($result['ObjectURL'])];
} catch (\Exception $e) {
return ['code' => 1, 'msg' => $e->getMessage()];
}
该接口返回的是 Guzzle\Service\Resource\Model 对象,可以使用其提供的方法 toArray() 将返回结果转化为数组。
如果该接口上传时传入的 key 已存在,则会覆盖。
3、结束
3.1、PHP SDK 中的其他接口
接口名称 | 请求方法 |
---|
获取 Bucket 列表 | $cosClient->listBuckets(); |
创建 Bucket | $cosClient->createBucket(['Bucket' => 'testbucket-' . env('COS_APPID')]); |
删除 Bucket | $cosClient->deleteBucket(['Bucket' => 'testbucket-' . env('COS_APPID')]); |
删除文件 | $cosClient->deleteObject(['Bucket' => 'testbucket-' . env('COS_APPID'), 'Key' => 'activity/worldcup/123.jpg']); |
... | ... |
3.2、官方 PHP SDK 文档地址
https://cloud.tencent.com/document/product/436/12266