1.服务端使用该接口获取临时key和secret
qcloud-cos-sts-php-sdk-master.zip
public function getTmpKey()
{
$config = \Yaf_Registry::get('config');
$callConfig = $config->cdn;
$sts = new Sts();
$config = array(
'url' => 'https://sts.tencentcloudapi.com/',
'domain' => 'sts.tencentcloudapi.com',
'proxy' => '',
'secretId' => $callConfig['apiKeyId'], // 固定密钥
'secretKey' => $callConfig['apiKeySecret'], // 固定密钥
'bucket' => $callConfig['videoBucket'], // 固定密钥
'region' => $callConfig['region'], // 固定密钥
'durationSeconds' => 1800, // 密钥有效期
// 允许操作(上传)的对象前缀,可以根据自己网站的用户登录态判断允许上传的目录,例子: user1/* 或者 * 或者a.jpg
// 请注意当使用 * 时,可能存在安全风险,详情请参阅:https://cloud.tencent.com/document/product/436/40265
'allowPrefix' => '*',
// 密钥的权限列表。简单上传和分片需要以下的权限,其他权限列表请看 https://cloud.tencent.com/document/product/436/31923
'allowActions' => array (
// 所有 action 请看文档 https://cloud.tencent.com/document/product/436/31923
// 简单上传
'name/cos:PutObject',
'name/cos:PostObject',
// 分片上传
'name/cos:InitiateMultipartUpload',
'name/cos:ListMultipartUploads',
'name/cos:ListParts',
'name/cos:UploadPart',
'name/cos:CompleteMultipartUpload'
)
);
// 获取临时密钥,计算签名
$tempKeys = $sts->getTempKeys($config);
// 返回数据给前端
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: http://saas.edu.ke.com'); // 这里修改允许跨域访问的网站
header('Access-Control-Allow-Headers: origin,accept,content-type');
return $tempKeys;
}2.前端调用
<script src="/js/cos-js-sdk-v5.min.js"></script>
var getAuthorization = function (options, callback) {
var url = '/Oss/getTmpKey';
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onload = function (e) {
try {
var data = JSON.parse(e.target.responseText);
var credentials = data.data.credentials;
} catch (e) {
}
if (!data || !credentials) return console.error('credentials invalid');
var authorization = COS.getAuthorization({
SecretId: credentials.tmpSecretId, // 可传固定密钥或者临时密钥
SecretKey: credentials.tmpSecretKey, // 可传固定密钥或者临时密钥
Method: options.Method,
Pathname: options.Pathname,
Query: options.Query,
Headers: options.Headers,
Expires: 900,
});
callback({
Authorization: authorization,
XCosSecurityToken: credentials.sessionToken,
});
};
xhr.send();
};
var cos = new COS({
getAuthorization: getAuthorization,
// UploadCheckContentMd5: true,
});var file = event.target.files[0]
console.log(file[0])
if (file.size > 1024 * 1024) {
console.log('大文件')
cos.sliceUploadFile({
Bucket: videoBucket,
Region: Region,
Key: file_name,
Body: file,
onTaskReady: function (tid) {
TaskId = tid;
},
onHashProgress: function (progressData) {
console.log('onHashProgress')
console.log(JSON.stringify(progressData));
},
onProgress: function (progressData) {
console.log('onProgress')
video_resource_progress = parseInt(progressData.loaded/progressData.total)*100;
console.log(JSON.stringify(progressData));
},
}, function (err, data) {
if(err.statusCode == 200){
var tm = {};
tm.url = 'http://'+err.Location;
tm.video_path = err.Key;
}
console.log(err);
console.log(data);
});
} else {
console.log('小文件')
cos.putObject({
Bucket: videoBucket,
Region: Region,
Key: file.name,
Body: file,
onTaskReady: function (tid) {
TaskId = tid;
},
onHashProgress: function (progressData) {
console.log('onHashProgress')
console.log(JSON.stringify(progressData));
},
onProgress: function (progressData) {
console.log('onProgress')
video_resource_progress = parseInt(progressData.loaded/progressData.total)*100;
console.log(JSON.stringify(progressData));
},
}, function (err, data) {
console.log(err);
console.log(data);
if(err.statusCode == 200){
var tm = {};
tm.url = 'http://'+err.Location;
tm.video_path = err.Key;
}
});
}本文为看恩吧原创文章,转载无需和我联系,但请注明来自knsay.com