3
3
4
4
// 配置参数
5
5
$ config = array (
6
- 'Url ' => 'https://sts.api.qcloud.com/v2/index.php ' ,
7
- 'Domain ' => 'sts.api.qcloud.com ' ,
8
- 'Proxy ' => '' ,
9
- 'SecretId ' => 'AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ' , // 固定密钥
10
- 'SecretKey ' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ' , // 固定密钥
11
- 'Bucket ' => 'test-1250000000 ' ,
12
- 'Region ' => 'ap-guangzhou ' ,
13
- 'AllowPrefix ' => '_ALLOW_DIR_/* ' , // 必填,这里改成允许的路径前缀,这里可以根据自己网站的用户登录态判断允许上传的目录,例子:* 或者 a/* 或者 a.jpg
6
+ 'url ' => 'https://sts.api.qcloud.com/v2/index.php ' ,
7
+ 'domain ' => 'sts.api.qcloud.com ' ,
8
+ 'proxy ' => '' ,
9
+ 'secretId ' => 'AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ' , // 固定密钥
10
+ 'secretKey ' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ' , // 固定密钥
11
+ 'bucket ' => 'test-1250000000 ' , // 换成你的 bucket
12
+ 'region ' => 'ap-guangzhou ' , // 换成 bucket 所在园区
13
+ 'durationSeconds ' => 1800 , // 密钥有效期
14
+ 'allowPrefix ' => '* ' , // 必填,这里改成允许的路径前缀,这里可以根据自己网站的用户登录态判断允许上传的目录,例子:* 或者 a/* 或者 a.jpg
15
+ // 密钥的权限列表。简单上传和分片需要以下的权限,其他权限列表请看 https://cloud.tencent.com/document/product/436/14048
16
+ 'allowActions ' => array (
17
+ // 简单上传
18
+ 'name/cos:PutObject ' ,
19
+ // 分片上传
20
+ 'name/cos:InitiateMultipartUpload ' ,
21
+ 'name/cos:ListMultipartUploads ' ,
22
+ 'name/cos:ListParts ' ,
23
+ 'name/cos:UploadPart ' ,
24
+ 'name/cos:CompleteMultipartUpload '
25
+ )
14
26
);
15
27
16
28
function _hex2bin ($ data ) {
@@ -31,7 +43,7 @@ function json2str($obj, $notEncode = false) {
31
43
// 计算临时密钥用的签名
32
44
function getSignature ($ opt , $ key , $ method ) {
33
45
global $ config ;
34
- $ formatString = $ method . $ config ['Domain ' ] . '/v2/index.php? ' . json2str ($ opt , 1 );
46
+ $ formatString = $ method . $ config ['domain ' ] . '/v2/index.php? ' . json2str ($ opt , 1 );
35
47
$ sign = hash_hmac ('sha1 ' , $ formatString , $ key );
36
48
$ sign = base64_encode (_hex2bin ($ sign ));
37
49
return $ sign ;
@@ -41,108 +53,17 @@ function getSignature($opt, $key, $method) {
41
53
function getTempKeys () {
42
54
43
55
global $ config ;
44
-
45
- // 判断是否修改了 AllowPrefix
46
- if ($ config ['AllowPrefix ' ] === '_ALLOW_DIR_/* ' ) {
47
- return array ('error ' => '请修改 AllowPrefix 配置项,指定允许上传的路径前缀 ' );
48
- }
49
-
50
- $ ShortBucketName = substr ($ config ['Bucket ' ],0 , strripos ($ config ['Bucket ' ], '- ' ));
51
- $ AppId = substr ($ config ['Bucket ' ], 1 + strripos ($ config ['Bucket ' ], '- ' ));
56
+ $ ShortBucketName = substr ($ config ['bucket ' ],0 , strripos ($ config ['bucket ' ], '- ' ));
57
+ $ AppId = substr ($ config ['bucket ' ], 1 + strripos ($ config ['bucket ' ], '- ' ));
52
58
$ policy = array (
53
59
'version ' => '2.0 ' ,
54
60
'statement ' => array (
55
61
array (
56
- 'action ' => array (
57
- // // 所有操作
58
- // 'name/cos:*',
59
-
60
- // // 列出 Bucket 列表
61
- // 'name/cos:GetService',
62
- // // Bucket ACL 读写
63
- // 'name/cos:GetBucketACL',
64
- // 'name/cos:PutBucketACL',
65
- // // Object ACL 读写
66
- // 'name/cos:GetObjectACL',
67
- // 'name/cos:PutObjectACL',
68
- // // Policy 权限策略
69
- // 'name/cos:PutBucket',
70
- // 'name/cos:HeadBucket',
71
- // 'name/cos:GetBucket',
72
- // 'name/cos:GetBucketObjectVersions',
73
- // 'name/cos:DeleteBucket',
74
- // 'name/cos:GetBucketLocation',
75
- // // Policy 权限策略
76
- // 'name/cos:GetBucketPolicy',
77
- // 'name/cos:PutBucketPolicy',
78
- // 'name/cos:DeleteBucketPolicy',
79
- // // Versioning 多版本配置
80
- // 'name/cos:PutBucketVersioning',
81
- // 'name/cos:GetBucketVersioning',
82
- // // CORS 跨域配置
83
- // 'name/cos:PutBucketCORS',
84
- // 'name/cos:GetBucketCORS',
85
- // 'name/cos:DeleteBucketCORS',
86
- // // Lifecycle 生命周期
87
- // 'name/cos:PutBucketLifecycle',
88
- // 'name/cos:GetBucketLifecycle',
89
- // 'name/cos:DeleteBucketLifecycle',
90
- // // Replication 跨区域复制
91
- // 'name/cos:PutBucketReplication',
92
- // 'name/cos:GetBucketReplication',
93
- // 'name/cos:DeleteBucketReplication',
94
- // // Tagging 标签
95
- // 'name/cos:PutBucketTagging',
96
- // 'name/cos:GetBucketTagging',
97
- // 'name/cos:DeleteBucketTagging',
98
- // // Referer 防盗链
99
- // 'name/cos:GetBucketReferer',
100
- // 'name/cos:PutBucketReferer',
101
- // 'name/cos:DeleteBucketReferer',
102
- // // Origin 源站设置
103
- // 'name/cos:GetBucketOrigin',
104
- // 'name/cos:PutBucketOrigin',
105
- // 'name/cos:DeleteBucketOrigin',
106
- // // Website 静态网站
107
- // 'name/cos:GetBucketWebsite',
108
- // 'name/cos:DeleteBucketWebsite',
109
- // 'name/cos:PutBucketWebsite',
110
- // // Logging 日志记录
111
- // 'name/cos:GetBucketLogging',
112
- // 'name/cos:PutBucketLogging',
113
- // // Logging 日志记录
114
- // 'name/cos:GetBucketNotification',
115
- // 'name/cos:PutBucketNotification',
116
- // // 删除文件
117
- // 'name/cos:DeleteMultipleObjects',
118
- // 'name/cos:DeleteObject',
119
- // 'name/cos:AbortMultipartUpload',
120
- // // 复制文件或分片
121
- // 'name/cos:PutObjectCopy',
122
- // 'name/cos:UploadPartCopy',
123
- // // 取回归档
124
- // 'name/cos:PostObjectRestore',
125
- // // 读取文件
126
- // 'name/cos:HeadObject',
127
- // 'name/cos:GetObject',
128
- // 'name/cos:OptionsObject',
129
- // // 上传操作
130
- // 'name/cos:PostObject',
131
- // 'name/cos:AppendObject',
132
- // 简单上传
133
- 'name/cos:PutObject ' ,
134
- // 分片上传操作
135
- 'name/cos:InitiateMultipartUpload ' ,
136
- 'name/cos:ListMultipartUploads ' ,
137
- 'name/cos:ListParts ' ,
138
- 'name/cos:UploadPart ' ,
139
- 'name/cos:CompleteMultipartUpload ' ,
140
- ),
62
+ 'action ' => $ config ['allowActions ' ],
141
63
'effect ' => 'allow ' ,
142
64
'principal ' => array ('qcs ' => array ('* ' )),
143
65
'resource ' => array (
144
- 'qcs::cos: ' . $ config ['Region ' ] . ':uid/ ' . $ AppId . ':prefix// ' . $ AppId . '/ ' . $ ShortBucketName . '/ ' ,
145
- 'qcs::cos: ' . $ config ['Region ' ] . ':uid/ ' . $ AppId . ':prefix// ' . $ AppId . '/ ' . $ ShortBucketName . '/ ' . $ config ['AllowPrefix ' ]
66
+ 'qcs::cos: ' . $ config ['region ' ] . ':uid/ ' . $ AppId . ':prefix// ' . $ AppId . '/ ' . $ ShortBucketName . '/ ' . $ config ['allowPrefix ' ]
146
67
)
147
68
)
148
69
)
@@ -156,19 +77,19 @@ function getTempKeys() {
156
77
157
78
$ params = array (
158
79
'Region ' => 'gz ' ,
159
- 'SecretId ' => $ config ['SecretId ' ],
80
+ 'SecretId ' => $ config ['secretId ' ],
160
81
'Timestamp ' => $ Timestamp ,
161
82
'Nonce ' => $ Nonce ,
162
83
'Action ' => $ Action ,
163
- 'durationSeconds ' => 7200 ,
84
+ 'durationSeconds ' => $ config [ ' durationSeconds ' ] ,
164
85
'name ' => 'cos ' ,
165
86
'policy ' => urlencode ($ policyStr )
166
87
);
167
- $ params ['Signature ' ] = getSignature ($ params , $ config ['SecretKey ' ], $ Method );
88
+ $ params ['Signature ' ] = getSignature ($ params , $ config ['secretKey ' ], $ Method );
168
89
169
- $ url = $ config ['Url ' ];
90
+ $ url = $ config ['url ' ];
170
91
$ ch = curl_init ($ url );
171
- $ config ['Proxy ' ] && curl_setopt ($ ch , CURLOPT_PROXY , $ config ['Proxy ' ]);
92
+ $ config ['proxy ' ] && curl_setopt ($ ch , CURLOPT_PROXY , $ config ['proxy ' ]);
172
93
curl_setopt ($ ch , CURLOPT_HEADER , 0 );
173
94
curl_setopt ($ ch ,CURLOPT_SSL_VERIFYPEER ,0 );
174
95
curl_setopt ($ ch ,CURLOPT_SSL_VERIFYHOST ,0 );
@@ -182,7 +103,7 @@ function getTempKeys() {
182
103
$ result = json_decode ($ result , 1 );
183
104
if (isset ($ result ['data ' ])) {
184
105
$ result = $ result ['data ' ];
185
- $ result ['startTime ' ] = $ Timestamp ;
106
+ $ result ['startTime ' ] = $ result [ ' expiredTime ' ] - $ config [ ' durationSeconds ' ] ;
186
107
}
187
108
188
109
return $ result ;
0 commit comments