diff --git a/csp/README.md b/csp/README.md
index dbfaa44..2bf5ef3 100644
--- a/csp/README.md
+++ b/csp/README.md
@@ -1,4 +1,4 @@
-# COS JavaScript SDK 私有化使用文档
+# COS JavaScript SDK CSP 使用文档
[快速入门](./start.md)
diff --git a/csp/api.md b/csp/api.md
index ba4c3cb..378de81 100644
--- a/csp/api.md
+++ b/csp/api.md
@@ -1,3 +1,5 @@
+# COS JavaScript SDK CSP 接口说明
+
> 本文针对 JavaScript SDK 的接口做详细的介绍说明
JavaScript SDK github 地址:[tencentyun/cos-js-sdk-v5](https://github.com/tencentyun/cos-js-sdk-v5)
@@ -547,7 +549,7 @@ cos.putBucketAcl({
cos.putBucketAcl({
Bucket: 'test-1250000000', /* 必须 */
Region: 'ap-guangzhou', /* 必须 */
- GrantFullControl: 'id="qcs::cam::uin/1001:uin/1001",id="qcs::cam::uin/1002:uin/1002"' // 1001 是 uin
+ GrantFullControl: 'id="qcs::cam::uin/1001:uin/1001",id="qcs::cam::uin/1002:uin/1002"' // 1001 是 uin(帐号ID)
}, function(err, data) {
console.log(err || data);
});
@@ -558,7 +560,7 @@ cos.putBucketAcl({
cos.putBucketAcl({
Bucket: 'test-1250000000', /* 必须 */
Region: 'ap-guangzhou', /* 必须 */
- GrantFullControl: 'id="qcs::cam::uin/1001:uin/1001",id="qcs::cam::uin/1002:uin/1002"' // 1001 是 uin
+ GrantFullControl: 'id="qcs::cam::uin/1001:uin/1001",id="qcs::cam::uin/1002:uin/1002"' // 1001 是 uin(帐号ID)
}, function(err, data) {
console.log(err || data);
});
@@ -599,11 +601,11 @@ cos.putBucketAcl({
| GrantFullControl | 赋予被授权者读写权限。格式:id=" ",id=" ";
当需要给子账户授权时,id="qcs::cam::uin/<OwnerUin>:uin/<SubUin>",
当需要给根账户授权时,id="qcs::cam::uin/<OwnerUin>:uin/<OwnerUin>",
例如:'id="qcs::cam::uin/123:uin/123", id="qcs::cam::uin/123:uin/456"' | String | 否 |
| AccessControlPolicy | 说明跨域资源共享配置的所有信息列表 | Object | 否 |
| - Owner | 代表存储桶所有者的对象 | Object | 否 |
-| - - ID | 代表用户 ID 的字符串,格式如 qcs::cam::uin/1001:uin/1001,1001 是 uin | Object | 否 |
+| - - ID | 代表用户 ID 的字符串,格式如 qcs::cam::uin/1001:uin/1001,1001 是 uin(帐号ID) | Object | 否 |
| - Grants | 说明跨域资源共享配置的所有信息列表 | Object | 否 |
| - - Permission | 说明跨域资源共享配置的所有信息列表,可选项 READ、WRITE、READ_ACP、WRITE_ACP、FULL_CONTROL | String | 否 |
| - - Grantee | 说明跨域资源共享配置的所有信息列表 | ObjectArray | 否 |
-| - - - ID | 代表用户 ID 的字符串,格式如 qcs::cam::uin/1001:uin/1001,1001 是 uin | String | 否 |
+| - - - ID | 代表用户 ID 的字符串,格式如 qcs::cam::uin/1001:uin/1001,1001 是 uin(帐号ID) | String | 否 |
| - - - DisplayName | 代表用户名称的字符串,一般填写成和 ID 一致的字符串 | String | 否 |
#### 回调函数说明
@@ -783,6 +785,47 @@ function(err, data) { ... }
| - headers | 请求返回的头部信息 | Object |
+### Get Bucket Location
+
+[Get Bucket Location 接口说明](https://cloud.tencent.com/document/product/436/8275)
+
+Get Bucket Location 接口用于获取 Bucket 所在的地域信息,该 GET 操作使用 location 子资源返回 Bucket 所在的区域,只有 Bucket 持有者才有该 API 接口的操作权限。
+
+#### 使用示例
+
+```js
+cos.getBucketLocation({
+ Bucket: 'test-1250000000', /* 必须 */
+ Region: 'ap-guangzhou', /* 必须 */
+}, function(err, data) {
+ console.log(err || data);
+});
+```
+
+#### 参数说明
+
+| 参数名 | 参数描述 | 类型 | 必填 |
+|--------|----------|------|------|
+| Bucket | Bucket 的名称。命名规则为{name}-{appid} ,此处填写的存储桶名称必须为此格式 | String | 是 |
+| Region | Bucket 所在区域。枚举值请见:[Bucket 地域信息](https://cloud.tencent.com/document/product/436/6224) | String | 是 |
+
+#### 回调函数说明
+
+```js
+function(err, data) { ... }
+```
+
+| 参数名 | 参数描述 | 类型 |
+|--------|----------|------|
+| err | 请求发生错误时返回的对象,包括网络错误和业务错误。如果请求成功,则为空,[错误码文档](https://cloud.tencent.com/document/product/436/7730) | Object |
+| - statusCode | 请求返回的 HTTP 状态码,如 200、403、404 等 | Number |
+| - headers | 请求返回的头部信息 | Object |
+| data | 请求成功时返回的对象,如果请求发生错误,则为空 | Object |
+| - statusCode | 请求返回的 HTTP 状态码,如 200、403、404 等 | Number |
+| - headers | 请求返回的头部信息 | Object |
+| - LocationConstraint |Bucket 所在区域。枚举值请见:[Bucket 地域信息](https://cloud.tencent.com/document/product/436/6224) | String |
+
+
### Get Bucket Lifecycle
[Get Bucket Lifecycle 接口说明](https://cloud.tencent.com/document/product/436/8278)
@@ -1554,7 +1597,7 @@ cos.putObjectAcl({
Bucket: 'test-1250000000', /* 必须 */
Region: 'ap-guangzhou', /* 必须 */
Key: '1.jpg', /* 必须 */
- GrantFullControl: 'id="qcs::cam::uin/1001:uin/1001",id="qcs::cam::uin/1002:uin/1002"' // 1001 是 uin
+ GrantFullControl: 'id="qcs::cam::uin/1001:uin/1001",id="qcs::cam::uin/1002:uin/1002"' // 1001 是 uin(帐号ID)
}, function(err, data) {
console.log(err || data);
});
@@ -2200,62 +2243,3 @@ cos.restartTask(taskId);
| 参数名 | 参数描述 | 类型 | 必填 |
|--------|----------|------|------|
| taskId | 文件上传任务的编号,在调用 sliceUploadFile 方法时,其 TaskReady 回调会返回该上传任务的 taskId | String | 是 |
-
-
-### Slice Copy File
-
-Slice Copy File 可用于实现通过分块复制将一个文件从源路径复制到目标路径。在拷贝的过程中,文件元属性和 ACL 可以被修改。用户可以通过该接口实现文件移动,文件重命名,修改文件属性和创建副本。
-
-#### 操作方法原型
-
-调用 Slice Copy File 操作:
-
-```js
-cos.sliceCopyFile({
- Bucket: 'test-1250000000', /* 必须 */
- Region: 'ap-guangzhou', /* 必须 */
- Key: '1.zip', /* 必须 */
- CopySource: 'test1.cos.ap-guangzhou.myqcloud.com/2.zip', /* 必须 */
- onProgress:function (progressData) { /* 非必须 */
- console.log(JSON.stringify(progressData));
- }
-},function (err,data) {
- console.log(err || data);
-});
-
-```
-
-#### 操作参数说明
-
-| 参数名 | 参数描述 | 类型 | 必填 |
-|--------|---------|--------|--------|
-| Bucket | Bucket 的名称。命名规则为{name}-{appid} ,此处填写的存储桶名称必须为此格式 | String | 是 |
-| Region | Bucket 所在区域。枚举值请见:[Bucket 地域信息](https://cloud.tencent.com/document/product/436/6224) | String | 是 |
-| Key | 对象键(Object 的名称),对象在存储桶中的唯一标识,[对象键说明](https://cloud.tencent.com/document/product/436/13324) | String | 是 |
-| CopySource | 源文件 URL 路径 | String | 是 |
-| ChunkSize | 分片复制时,每片的大小字节数,默认值 1048576 (1MB) | Number | 否 |
-| SliceSize | 使用分片复制的文件大小,默认值 5G | Number | 否 |
-| onProgress | 上传文件的进度回调函数,回调参数为进度对象 progressData | Function | 否 |
-| - progressData.loaded | 已经上传的文件部分大小,以字节(bytes)为单位 | Number | 否 |
-| - progressData.total | 整个文件的大小,以字节(bytes)为单位 | Number | 否 |
-| - progressData.speed | 文件的上传速度,以字节/秒(bytes/s)为单位 | Number | 否 |
-| - progressData.percent | 文件的上传百分比,以小数形式呈现,例如:下载 50% 即为 0.5 | Number | 否 |
-
-#### 回调函数说明
-
-```js
-function(err, data) { ... }
-```
-
-| 参数名 | 参数描述 | 类型 |
-|--------|---------|--------|
-| err | 请求发生错误时返回的对象,包括网络错误和业务错误。如果请求成功,则为空,错误码文档 | Object |
-| - statusCode | 请求返回的 HTTP 状态码,如 200、403、404 等 | Number |
-| - headers | 请求返回的头部信息 | Object |
-| data | 请求成功时返回的对象,如果请求发生错误,则为空 | Object |
-| - statusCode | 请求返回的 HTTP 状态码,如 200、403、404 等 | Number |
-| - headers | 请求返回的头部信息 | Object |
-| - Location | 创建的 Object 的外网访问域名 | String |
-| - Bucket | 分块上传的目标 Bucket | String |
-| - Key | 对象键(Object 的名称),对象在存储桶中的唯一标识,[对象键说明](https://cloud.tencent.com/document/product/436/13324) | String |
-| - ETag | 合并后文件的 MD5 算法校验值,如 "22ca88419e2ed4721c23807c678adbe4c08a7880",注意前后携带双引号 | String |
\ No newline at end of file
diff --git a/csp/auth.php b/csp/auth.php
index 77c8bf0..2b21d3e 100644
--- a/csp/auth.php
+++ b/csp/auth.php
@@ -55,8 +55,8 @@ function getAuthorization($method, $pathname, $query, $headers)
{
// 获取个人 API 密钥 https://console.qcloud.com/capi
- $SecretId = 'xxx';
- $SecretKey = 'xxx';
+ $SecretId = 'AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
+ $SecretKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
// 整理参数
!$query && ($query = array());
@@ -133,11 +133,19 @@ function obj2str($obj)
// 获取前端过来的参数
-$params = json_decode(file_get_contents("php://input"), 1);
-$pathname = isset($params['pathname']) ? $params['pathname'] : '/';
-$method = isset($params['method']) ? $params['method'] : 'get';
-$query = isset($params['query']) ? $params['query'] : array();
-$headers = isset($params['headers']) ? $params['headers'] : array();
+$inputBody = file_get_contents("php://input");
+if ($_SERVER['REQUEST_METHOD'] === 'POST' && $inputBody){
+ $params = json_decode($inputBody, 1);
+ $pathname = isset($params['pathname']) ? $params['pathname'] : '/';
+ $method = isset($params['method']) ? $params['method'] : 'get';
+ $query = isset($params['query']) ? $params['query'] : array();
+ $headers = isset($params['headers']) ? $params['headers'] : array();
+} else {
+ $pathname = isset($_GET['pathname']) ? $_GET['pathname'] : '/';
+ $method = isset($_GET['method']) ? $_GET['method'] : 'get';
+ $query = isset($_GET['query']) && $_GET['query'] ? json_decode($_GET['query'], 1) : array();
+ $headers = isset($_GET['headers']) && $_GET['headers'] ? json_decode($_GET['headers'], 1) : array();
+}
// 返回数据给前端
header('Content-Type: text/plain');
diff --git a/csp/csp.html b/csp/csp.html
index d0e89c4..02bdec2 100644
--- a/csp/csp.html
+++ b/csp/csp.html
@@ -51,20 +51,11 @@
cos-js-sdk-v5
ForcePathStyle: true, // 后缀式
// Domain: 'http://{Bucket}.cos.{Region}.example.com', // 前缀式
getAuthorization: function (options, callback) {
- var url = './sts.php';
+ var url = './auth.php?method=' + options.Method + '&pathname=' + encodeURIComponent(options.Key);
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onload = function (e) {
- try {
- var data = JSON.parse(e.target.responseText);
- } catch (e) {
- }
- callback({
- TmpSecretId: data.credentials && data.credentials.tmpSecretId,
- TmpSecretKey: data.credentials && data.credentials.tmpSecretKey,
- XCosSecurityToken: data.credentials && data.credentials.sessionToken,
- ExpiredTime: data.expiredTime,
- });
+ callback(e.target.responseText);
};
xhr.send();
},
@@ -155,27 +146,27 @@ cos-js-sdk-v5
ACL: 'private',
// AccessControlPolicy: {
// "Owner": { // AccessControlPolicy 里必须有 owner
- // "ID": 'qcs::cam::uin/459000000:uin/459000000' // 459000000 是 Bucket 所属用户的 QQ 号
+ // "ID": 'qcs::cam::uin/459000000:uin/459000000' // 459000000 是 Bucket 所属用户的 uin(帐号ID)
// },
// "Grants": [{
// "Grantee": {
- // "ID": "qcs::cam::uin/1001:uin/1001", // 10002 是 QQ 号
- // "DisplayName": "qcs::cam::uin/1001:uin/1001" // 10002 是 QQ 号
+ // "ID": "qcs::cam::uin/1001:uin/1001", // 10002 是 uin(帐号ID)
+ // "DisplayName": "qcs::cam::uin/1001:uin/1001" // 10002 是 uin(帐号ID)
// },
// "Permission": "READ"
// }, {
// "Grantee": {
- // "ID": "qcs::cam::uin/10002:uin/10002", // 10002 是 QQ 号
+ // "ID": "qcs::cam::uin/10002:uin/10002", // 10002 是 uin(帐号ID)
// },
// "Permission": "WRITE"
// }, {
// "Grantee": {
- // "ID": "qcs::cam::uin/10002:uin/10002", // 10002 是 QQ 号
+ // "ID": "qcs::cam::uin/10002:uin/10002", // 10002 是 uin(帐号ID)
// },
// "Permission": "READ_ACP"
// }, {
// "Grantee": {
- // "ID": "qcs::cam::uin/10002:uin/10002", // 10002 是 QQ 号
+ // "ID": "qcs::cam::uin/10002:uin/10002", // 10002 是 uin(帐号ID)
// },
// "Permission": "WRITE_ACP"
// }]
@@ -230,6 +221,15 @@ cos-js-sdk-v5
});
}
+ function getBucketLocation() {
+ cos.getBucketLocation({
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
+ Region: config.Region
+ }, function (err, data) {
+ logger.log(err || data);
+ });
+ }
+
function putBucketLifecycle() {
cos.putBucketLifecycle({
Bucket: config.Bucket, // Bucket 格式:test-1250000000
@@ -384,11 +384,11 @@ cos-js-sdk-v5
ACL: 'default', // 继承上一级目录权限
// AccessControlPolicy: {
// "Owner": { // AccessControlPolicy 里必须有 owner
- // "ID": 'qcs::cam::uin/459000000:uin/459000000' // 459000000 是 Bucket 所属用户的 QQ 号
+ // "ID": 'qcs::cam::uin/459000000:uin/459000000' // 459000000 是 Bucket 所属用户的 uin(帐号ID)
// },
// "Grants": [{
// "Grantee": {
- // "ID": "qcs::cam::uin/10002:uin/10002", // 10002 是 QQ 号
+ // "ID": "qcs::cam::uin/10002:uin/10002", // 10002 是 uin(帐号ID)
// },
// "Permission": "READ"
// }]
@@ -431,22 +431,6 @@ cos-js-sdk-v5
});
}
- function restoreObject() {
- cos.restoreObject({
- Bucket: config.Bucket, // Bucket 格式:test-1250000000
- Region: config.Region,
- Key: '1.txt',
- RestoreRequest: {
- Days: 1,
- CASJobParameters: {
- Tier: 'Expedited'
- }
- }
- }, function (err, data) {
- logger.log(err || data);
- });
- }
-
function abortUploadTask() {
cos.abortUploadTask({
Bucket: config.Bucket, /* 必须 */ // Bucket 格式:test-1250000000
@@ -608,34 +592,6 @@ cos-js-sdk-v5
}
- function sliceCopyFile() {
- // 创建测试文件
- var sourceName = '3mb.zip';
- var Key = '3mb.copy.zip';
-
- var sourcePath = config.Bucket + '.cos.' + config.Region + '.myqcloud.com/'+ encodeURIComponent(sourceName).replace(/%2F/g, '/');
-
- cos.sliceCopyFile({
- Bucket: config.Bucket, // Bucket 格式:test-1250000000
- Region: config.Region,
- Key: Key,
- CopySource: sourcePath,
- SliceSize: 2 * 1024 * 1024, // 大于2M的文件用分片复制,小于则用单片复制
- onProgress:function (info) {
- var percent = parseInt(info.percent * 10000) / 100;
- var speed = parseInt(info.speed / 1024 / 1024 * 100) / 100;
- logger.log('进度:' + percent + '%; 速度:' + speed + 'Mb/s;');
- }
- },function (err,data) {
- if(err){
- logger.log(err);
- }else{
- logger.log(data);
- }
- });
-
- }
-
var time0 = Date.now();
var preMsg = '页面加载完成';
var showTime = function (msg) {
@@ -694,10 +650,10 @@ cos-js-sdk-v5
'putBucketCors',
'getBucketCors',
// 'deleteBucketCors', // 不提供
+ 'getBucketLocation',
'getBucketLifecycle',
'putBucketLifecycle',
'deleteBucketLifecycle',
- 'deleteBucketLifecycle',
'putBucketReplication',
'getBucketReplication',
'deleteBucketReplication',
@@ -710,7 +666,6 @@ cos-js-sdk-v5
'getObjectAcl',
'deleteObject',
'deleteMultipleObject',
- 'restoreObject',
'abortUploadTask',
'sliceUploadFile',
'selectFileToUpload',
@@ -718,7 +673,6 @@ cos-js-sdk-v5
'pauseTask',
'restartTask',
'uploadFiles',
- 'sliceCopyFile',
'selectUploadFiles',
'startSelectUploadFiles',
];
diff --git a/csp/start.md b/csp/start.md
index bd6178a..bf904bc 100644
--- a/csp/start.md
+++ b/csp/start.md
@@ -1,4 +1,4 @@
-# CSP 使用 COS JavaScript SDK
+# COS JavaScript SDK CSP 快速入门
### SDK 获取
@@ -75,9 +75,4 @@ document.getElementById('file-selector').onchange = function () {
支持 webpack 打包的场景,可以用 npm 引入作为模块
```shell
npm i cos-js-sdk-v5 --save
-```
-
-## 其他文档和例子
-
-1. 更多例子请参阅 [XML JavaScript SDK Demo](https://github.com/tencentyun/cos-js-sdk-v5/blob/master/demo)。
-2. 完整接口文档请参阅 [XML JavaScript SDK 接口文档](https://cloud.tencent.com/document/product/436/12260)。
\ No newline at end of file
+```
\ No newline at end of file
diff --git a/csp/sts.php b/csp/sts.php
deleted file mode 100644
index 34a155f..0000000
--- a/csp/sts.php
+++ /dev/null
@@ -1,156 +0,0 @@
- 'http://sts.api2.example.com/v2/index.php',
- 'Domain' => 'sts.api2.example.com',
- 'Proxy' => '',
- 'SecretId' => 'AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // 固定密钥
- 'SecretKey' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // 固定密钥
- 'Bucket' => 'test-1250000000',
- 'Region' => 'default',
- 'AllowPrefix' => '_ALLOW_DIR_/*', // 必填,这里改成允许的路径前缀,这里可以根据自己网站的用户登录态判断允许上传的目录,例子:* 或者 a/* 或者 a.jpg
-);
-
-// obj 转 query string
-function json2str($obj, $notEncode = false) {
- ksort($obj);
- $arr = array();
- foreach ($obj as $key => $val) {
- array_push($arr, $key . '=' . ($notEncode ? $val : rawurlencode($val)));
- }
- return join('&', $arr);
-}
-
-// 计算临时密钥用的签名
-function getSignature($opt, $key, $method) {
- global $config;
- $formatString = $method . $config['Domain'] . '/v2/index.php?' . json2str($opt, 1);
- $sign = hash_hmac('sha1', $formatString, $key);
- $sign = base64_encode(hex2bin($sign));
- return $sign;
-}
-
-// 获取临时密钥
-function getTempKeys() {
-
- global $config;
-
- // 判断是否修改了 AllowPrefix
- if ($config['AllowPrefix'] === '_ALLOW_DIR_/*') {
- return array('error'=> '请修改 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 . '/' . $config['AllowPrefix']
- )
- )
- )
- );
-
- $policyStr = str_replace('\\/', '/', json_encode($policy));
- $Action = 'GetFederationToken';
- $Nonce = rand(10000, 20000);
- $Timestamp = time() - 1;
- $Method = 'POST';
-
- $params = array(
- 'Region'=> 'gz',
- 'SecretId'=> $config['SecretId'],
- 'Timestamp'=> $Timestamp,
- 'Nonce'=> $Nonce,
- 'Action'=> $Action,
- 'durationSeconds'=> 7200,
- 'name'=> 'cos',
- 'policy'=> urlencode($policyStr)
- );
- $params['Signature'] = getSignature($params, $config['SecretKey'], $Method);
-
- $url = $config['Url'];
- $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);
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_POSTFIELDS, json2str($params));
- $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 $result;
-}
-
-// 获取临时密钥,计算签名
-$tempKeys = getTempKeys();
-
-// 返回数据给前端
-header('Content-Type: application/json');
-header('Access-Control-Allow-Origin: http://127.0.0.1'); // 这里修改允许跨域访问的网站
-header('Access-Control-Allow-Headers: origin,accept,content-type');
-echo json_encode($tempKeys);