腾讯云存储开发
JavaScript +php
开发文档:https://cloud.tencent.com/document/product/436/11459
通过php生成密钥,框架我用的是tp5
composer 安装类库
composer require qcloud_sts/qcloud-sts-sdk:3.0.*
安装成功后可以看到vendor/qcloud_sts目录

use QCloud\COSSTS\Sts;
//获取腾讯云临时密钥
public function getUpKey(){
$sts = new Sts();
$config = array(
'url' => 'https://sts.tencentcloudapi.com/', // url和domain保持一致
'domain' => 'sts.tencentcloudapi.com', // 域名,非必须,默认为 sts.tencentcloudapi.com
'proxy' => '',
'secretId' => '你的secretId', // 固定密钥,若为明文密钥,请直接以'xxx'形式填入,不要填写到getenv()函数中
'secretKey' => '你的secretKey', // 固定密钥,若为明文密钥,请直接以'xxx'形式填入,不要填写到getenv()函数中
'bucket' => '你的bucket', // 换成你的 bucket
'region' => '你的regiont', // 换成 bucket 所在园区
'durationSeconds' => 1800, // 密钥有效期
'allowPrefix' => array($config['txy_position'].'/*'), // 这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的具体路径,例子: a.jpg 或者 a/* 或者 * (使用通配符*存在重大安全风险, 请谨慎评估使用)
// 密钥的权限列表。简单上传和分片需要以下的权限,其他权限列表请看 https://cloud.tencent.com/document/product/436/31923
'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:DeleteMultipleObjects',
'name/cos:DeleteObject',
)
);
// 获取临时密钥,计算签名
$tempKeys = $sts->getTempKeys($config);
echo json_encode($tempKeys);
}下载js
<!--src为本地路径 根据自己项目目录结构来调整-->
<script src="../dist/cos-js-sdk-v5.min.js"></script>
var cos = new COS({
SecretId: data.credentials.tmpSecretId, // sts服务下发的临时 secretId
SecretKey: data.credentials.tmpSecretKey, // sts服务下发的临时 secretKey
SecurityToken: data.credentials.sessionToken, // sts服务下发的临时 SessionToken
StartTime: data.startTime, // 建议传入服务端时间,可避免客户端时间不准导致的签名错误
ExpiredTime: data.expiredTime, // 临时密钥过期时间
});
//file文件对象
async function upload(file) {
try {
const data = await cos.uploadFile({
Bucket: Bucket, // 填写自己的 bucket,必须字段
Region: Region, // 存储桶所在地域,必须字段
Key:'1.jpg', // 存储在桶里的对象键(例如1.jpg,a/b/test.txt),必须字段
Body: file, // 上传文件对象
SliceSize: 1024 * 1024 * 5, // 触发分块上传的阈值,超过5MB 使用分块上传,小于5MB使用简单上传。可自行设置,非必须
onProgress: function(progressData) {
console.log('上传进度', data);
},
onTaskReady: function(id) { // 非必须
taskId = id;
},
});
console.log('上传成功写入记录', data);
} catch (e) {
console.error('上传失败', e);
}
}
