IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 腾讯云获取临时上传文件密钥 -> 正文阅读

[开发测试]腾讯云获取临时上传文件密钥

<?php

namespace app\adminapi\controller;

use hg\apidoc\annotation as Apidoc;
use think\facade\Config;

/**
?*
?* @Apidoc\Title("腾讯云临时密钥模块")
?*
?*/
class QcloudTemporaryKey
{
? ? //?
? ? /**
? ? ?* @Apidoc\Title("获取腾讯云临时密钥接口")
? ? ?* @Apidoc\Desc("")
? ? ?* @Apidoc\Url("/adminapi/getQcloudTempKeys")
? ? ?* @Apidoc\Method("GET")
? ? ?* @Apidoc\Tag("")
? ? ?* @Apidoc\Header("Authorization", type="string",require="true", desc="授权token")
? ? ?* @Apidoc\Returned("code", type="int",default="200", desc="成功码")
? ? ?* @Apidoc\Returned("msg", type="string",default="请求成功",desc="成功或错误提示")
? ? ?* @Apidoc\Returned("data", type="object", desc="返回数据",
? ? ?* ?? ?@Apidoc\Returned("credentials", type="object",desc="",
? ? ?* ? ? ?@Apidoc\Returned("sessionToken", type="string",default="", desc=""),
? ? ?* ? ? ?@Apidoc\Returned("tmpSecretId", type="string",default="", desc=""),
? ? ?* ? ? ?@Apidoc\Returned("tmpSecretKey", type="string",default="", desc=""),
? ? ?* ?),
? ? ?* ?@Apidoc\Returned("expiredTime", type="string",default="", desc=""),
? ? ?* )
? ? ?*/
? ? public function getQcloudTempKeys() {
? ? ? ??
? ? ? ? $config = array(
? ? ? ? ? ? 'Url' => 'https://sts.api.qcloud.com/v2/index.php',
? ? ? ? ? ? 'Domain' => 'sts.api.qcloud.com',
? ? ? ? ? ? 'Proxy' => '',
? ? ? ? ? ? 'SecretId' => Config::get('upload.qcloudcos.secret_id'), // 固定密钥
? ? ? ? ? ? 'SecretKey' => Config::get('upload.qcloudcos.secret_key'), // 固定密钥
? ? ? ? ? ? 'Bucket' => Config::get('upload.qcloudcos.bucket'),
? ? ? ? ? ? 'Region' => Config::get('upload.qcloudcos.region'),//存储桶的地域
? ? ? ? ? ? 'AllowPrefix' => '*', // 必填,这里改成允许的路径前缀,这里可以根据自己网站的用户登录态判断允许上传的目录,例子:* 或者 a/* 或者 a.jpg
? ? ? ? );
? ? ? ??
? ? ? ? // 判断是否修改了 AllowPrefix
? ? ? ? if ($config['AllowPrefix'] === '_ALLOW_DIR_/*') {
? ? ? ? ? ? return returnErrorJson('请修改 AllowPrefix 配置项,指定允许上传的路径前缀');
? ? ? ? }
? ? ? ??
? ? ? ? $ShortBucketName = substr($config['Bucket'],0, strripos($config['Bucket'], '-'));
? ? ? ? $AppId = substr($config['Bucket'], 1 + strripos($config['Bucket'], '-'));
? ? ? ? $policy = array(
? ? ? ? ? ? 'version'=> '2.0',
? ? ? ? ? ? 'statement'=> array(
? ? ? ? ? ? ? ? array(
? ? ? ? ? ? ? ? ? ? 'action'=> array(
? ? ? ? ? ? ? ? ? ? ? ? // // 这里可以从临时密钥的权限上控制前端允许的操作
? ? ? ? ? ? ? ? ? ? ? ? //'name/cos:*', // 这样写可以包含下面所有权限
? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? // // 列出所有允许的操作
? ? ? ? ? ? ? ? ? ? ? ? // // ACL 读写
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:GetBucketACL',
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:PutBucketACL',
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:GetObjectACL',
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:PutObjectACL',
? ? ? ? ? ? ? ? ? ? ? ? // // 简单 Bucket 操作
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:PutBucket',
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:HeadBucket',
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:GetBucket',
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:DeleteBucket',
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:GetBucketLocation',
? ? ? ? ? ? ? ? ? ? ? ? // // Versioning
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:PutBucketVersioning',
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:GetBucketVersioning',
? ? ? ? ? ? ? ? ? ? ? ? // // CORS
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:PutBucketCORS',
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:GetBucketCORS',
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:DeleteBucketCORS',
? ? ? ? ? ? ? ? ? ? ? ? // // Lifecycle
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:PutBucketLifecycle',
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:GetBucketLifecycle',
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:DeleteBucketLifecycle',
? ? ? ? ? ? ? ? ? ? ? ? // // Replication
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:PutBucketReplication',
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:GetBucketReplication',
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:DeleteBucketReplication',
? ? ? ? ? ? ? ? ? ? ? ? // // 删除文件
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:DeleteMultipleObject',
? ? ? ? ? ? ? ? ? ? ? ? // 'name/cos:DeleteObject',
? ? ? ? ? ? ? ? ? ? ? ? // 简单文件操作
? ? ? ? ? ? ? ? ? ? ? ? 'name/cos:PutObject',
? ? ? ? ? ? ? ? ? ? ? ? 'name/cos:PostObject',
? ? ? ? ? ? ? ? ? ? ? ? 'name/cos:AppendObject',
? ? ? ? ? ? ? ? ? ? ? ? 'name/cos:GetObject',
? ? ? ? ? ? ? ? ? ? ? ? 'name/cos:HeadObject',
? ? ? ? ? ? ? ? ? ? ? ? 'name/cos:OptionsObject',
? ? ? ? ? ? ? ? ? ? ? ? 'name/cos:PutObjectCopy',
? ? ? ? ? ? ? ? ? ? ? ? 'name/cos:PostObjectRestore',
? ? ? ? ? ? ? ? ? ? ? ? // 分片上传操作
? ? ? ? ? ? ? ? ? ? ? ? 'name/cos:InitiateMultipartUpload',
? ? ? ? ? ? ? ? ? ? ? ? 'name/cos:ListMultipartUploads',
? ? ? ? ? ? ? ? ? ? ? ? 'name/cos:ListParts',
? ? ? ? ? ? ? ? ? ? ? ? 'name/cos:UploadPart',
? ? ? ? ? ? ? ? ? ? ? ? 'name/cos:CompleteMultipartUpload',
? ? ? ? ? ? ? ? ? ? ? ? 'name/cos:AbortMultipartUpload',
? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? 'effect'=> 'allow',
? ? ? ? ? ? ? ? ? ? 'principal'=> array('qcs'=> array('*')),
? ? ? ? ? ? ? ? ? ? 'resource'=> array(
? ? ? ? ? ? ? ? ? ? ? ? 'qcs::cos:' . $config['Region'] . ':uid/' . $AppId . ':prefix//' . $AppId . '/' . $ShortBucketName . '/',
? ? ? ? ? ? ? ? ? ? ? ? 'qcs::cos:' . $config['Region'] . ':uid/' . $AppId . ':prefix//' . $AppId . '/' . $ShortBucketName . '/' . $this->resourceUrlEncode($config['AllowPrefix'])
? ? ? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ? )
? ? ? ? ? ? )
? ? ? ? );
? ? ? ??
? ? ? ? $policyStr = str_replace('\\/', '/', json_encode($policy));
? ? ? ? $Action = 'GetFederationToken';
? ? ? ? $Nonce = rand(10000, 20000);
? ? ? ? $Timestamp = time() - 1;
? ? ? ? $Method = 'GET';
? ? ? ??
? ? ? ? $params = array(
? ? ? ? ? ? 'Action'=> $Action,
? ? ? ? ? ? 'Nonce'=> $Nonce,
? ? ? ? ? ? 'Region'=> '',
? ? ? ? ? ? 'SecretId'=> $config['SecretId'],
? ? ? ? ? ? 'Timestamp'=> $Timestamp,
? ? ? ? ? ? 'durationSeconds'=> 7200,
? ? ? ? ? ? 'name'=> 'cos',
? ? ? ? ? ? 'policy'=> urlencode($policyStr)
? ? ? ? );
? ? ? ? $params['Signature'] = urlencode($this->getSignature($params, $config['SecretKey'], $Method, $config));
? ? ? ??
? ? ? ? $url = $config['Url'] . '?' . $this->json2str($params);
? ? ? ? $ch = curl_init($url);
? ? ? ? $config['Proxy'] && curl_setopt($ch, CURLOPT_PROXY, $config['Proxy']);
? ? ? ? curl_setopt($ch, CURLOPT_HEADER, 0);
? ? ? ? curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
? ? ? ? curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
? ? ? ? curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
? ? ? ? $result = curl_exec($ch);
? ? ? ? if(curl_errno($ch)) $result = curl_error($ch);
? ? ? ? curl_close($ch);
? ? ? ??
? ? ? ? $result = json_decode($result, 1);
? ? ? ? if (isset($result['data'])) $result = $result['data'];
? ? ? ??
? ? ? ? return returnSuccessJson($result);
? ? }
? ??
? ? // obj 转 query string
? ? public function json2str($obj) {
? ? ? ? ksort($obj);
? ? ? ? $arr = array();
? ? ? ? foreach ($obj as $key => $val) {
? ? ? ? ? ? array_push($arr, $key . '=' . $val);
? ? ? ? }
? ? ? ? return join('&', $arr);
? ? }
? ??
? ? // 计算临时密钥用的签名
? ? public function getSignature($opt, $key, $method, $config) {
? ? ? ? $formatString = $method . $config['Domain'] . '/v2/index.php?' . $this->json2str($opt);
? ? ? ? $formatString = urldecode($formatString);
? ? ? ? $sign = hash_hmac('sha1', $formatString, $key);
? ? ? ? $sign = base64_encode(hex2bin($sign));
? ? ? ? return $sign;
? ? }
? ??
? ? // 计算临时密钥用的签名
? ? public function resourceUrlEncode($str) {
? ? ? ? $str = rawurlencode($str);
? ? ? ? //特殊处理字符 !()~
? ? ? ? $str = str_replace('%2F', '/', $str);
? ? ? ? $str = str_replace('%2A', '*', $str);
? ? ? ? $str = str_replace('%21', '!', $str);
? ? ? ? $str = str_replace('%28', '(', $str);
? ? ? ? $str = str_replace('%29', ')', $str);
? ? ? ? $str = str_replace('%7E', '~', $str);
? ? ? ? return $str;
? ? }
? ??
}
?

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:56:28  更:2022-03-10 22:56:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 2:22:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码