腾讯云存储开发
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); } }