本文最后更新于 1841 天前,其中的信息可能已经有所发展或是发生改变。
一、 获取临时密钥的请求里,权限列表里需要添加下载权限。php实例代码:
$config = [ 'url' => self::URL, 'domain' => self::DOMAIN, 'proxy' => '', 'secretId' => $cos['secret_id'], // 固定密钥 'secretKey' => $cos['secret_key'], // 固定密钥 'bucket' => $bucket, // 换成你的 bucket 'region' => $region, // 换成 bucket 所在园区 'durationSeconds' => self::EXPIRE_TIME, // 密钥有效期 'allowPrefix' => '*', // 这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的目录,例子:* 或者 a/* 或者 a.jpg // 密钥的权限列表。简单上传和分片需要以下的权限, 'allowActions' => array ( // 简单上传 'name/cos:PutObject', 'name/cos:PostObject', // 分片上传 'name/cos:InitiateMultipartUpload', 'name/cos:ListMultipartUploads', 'name/cos:ListParts', 'name/cos:UploadPart', 'name/cos:CompleteMultipartUpload', // 下载 'name/cos:GetObject', ) ]; // 获取临时密钥,计算签名 $tempKeys = $this->sts->getTempKeys($config);
二、确保用于生成临时密钥的账号在所在的桶有相应的权限
https://console.cloud.tencent.com/cos5/bucket
我踩的坑是因为运维给到我的账号是子账号,但是没有权限。使用该子账号的密钥生成的临时密钥能够进行上传操作,但是下载对象返回403。这就很懵逼了。
提了工单给腾讯云,折腾几回合无果后,客服让我在桶所在的权限控制台页面截图看看,说如果是子账号的话,也是需要将子账号及相应权限添加到对应桶的。
让运维将子账号添加到所在桶,并勾选上传、下载数据权限后,成功下载。