Skip to content

Commit 7a2c63b

Browse files
authored
Dev/1.7.1 (#104)
新增元数据检索功能
1 parent c882649 commit 7a2c63b

File tree

13 files changed

+932
-55
lines changed

13 files changed

+932
-55
lines changed

README.md

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,29 +26,37 @@ var Bucket = 'test-1250000000';
2626
var Region = 'ap-guangzhou';
2727

2828
// 初始化实例
29-
var cos = new COS({
29+
const cos = new COS({
30+
SimpleUploadMethod: 'putObject', // 强烈建议,高级上传、批量上传内部对小文件做简单上传时使用putObject,sdk版本至少需要v1.3.0
3031
getAuthorization: function (options, callback) {
31-
// 异步获取签名
32+
// 初始化时不会调用,只有调用 cos 方法(例如 cos.putObject)时才会进入
33+
// 异步获取临时密钥
3234
wx.request({
33-
url: 'https://example.com/sts.php', // 步骤二提供的签名接口
35+
url: 'https://example.com/server/sts.php',
3436
data: {
35-
Method: options.Method,
36-
Key: options.Key
37+
bucket: options.Bucket,
38+
region: options.Region,
3739
},
38-
dataType: 'text',
40+
dataType: 'json',
3941
success: function (result) {
40-
var data = result.data;
42+
const data = result.data;
43+
const credentials = data && data.credentials;
44+
if (!data || !credentials) return console.error('credentials invalid');
4145
callback({
42-
TmpSecretId: data.credentials && data.credentials.tmpSecretId,
43-
TmpSecretKey: data.credentials && data.credentials.tmpSecretKey,
44-
XCosSecurityToken: data.credentials && data.credentials.sessionToken,
45-
ExpiredTime: data.expiredTime,
46+
TmpSecretId: credentials.tmpSecretId,
47+
TmpSecretKey: credentials.tmpSecretKey,
48+
// v1.2.0之前版本的 SDK 使用 XCosSecurityToken 而不是 SecurityToken
49+
SecurityToken: credentials.sessionToken,
50+
// 建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误
51+
StartTime: data.startTime, // 时间戳,单位秒,如:1580000000
52+
ExpiredTime: data.expiredTime, // 时间戳,单位秒,如:1580000900
4653
});
4754
}
4855
});
4956
}
5057
});
5158

59+
5260
// 选择文件
5361
wx.chooseImage({
5462
count: 1, // 默认9

demo-album/lib/cos-wx-sdk-v5.js

Lines changed: 76 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7448,7 +7448,7 @@ module.exports = function(module) {
74487448
/*! exports provided: name, version, description, main, scripts, repository, author, license, dependencies, devDependencies, default */
74497449
/***/ (function(module) {
74507450

7451-
module.exports = JSON.parse("{\"name\":\"cos-wx-sdk-v5\",\"version\":\"1.7.0\",\"description\":\"小程序 SDK for [腾讯云对象存储服务](https://cloud.tencent.com/product/cos)\",\"main\":\"demo/lib/cos-wx-sdk-v5.min.js\",\"scripts\":{\"prettier\":\"prettier --write src demo/demo-sdk.js demo/test.js demo/ciDemo\",\"dev\":\"cross-env NODE_ENV=development node build.js --mode=development\",\"build\":\"cross-env NODE_ENV=production node build.js --mode=production\",\"sts.js\":\"node server/sts.js\"},\"repository\":{\"type\":\"git\",\"url\":\"http://github.com/tencentyun/cos-wx-sdk-v5.git\"},\"author\":\"carsonxu\",\"license\":\"ISC\",\"dependencies\":{\"@xmldom/xmldom\":\"^0.8.6\",\"mime\":\"^2.4.6\"},\"devDependencies\":{\"@babel/core\":\"7.17.9\",\"@babel/preset-env\":\"7.16.11\",\"babel-loader\":\"8.2.5\",\"body-parser\":\"^1.18.3\",\"cross-env\":\"^7.0.3\",\"express\":\"^4.17.1\",\"prettier\":\"^3.0.1\",\"qcloud-cos-sts\":\"^3.0.2\",\"terser-webpack-plugin\":\"4.2.3\",\"webpack\":\"4.46.0\",\"webpack-cli\":\"4.10.0\"}}");
7451+
module.exports = JSON.parse("{\"name\":\"cos-wx-sdk-v5\",\"version\":\"1.7.1\",\"description\":\"小程序 SDK for [腾讯云对象存储服务](https://cloud.tencent.com/product/cos)\",\"main\":\"demo/lib/cos-wx-sdk-v5.min.js\",\"scripts\":{\"prettier\":\"prettier --write src demo/demo-sdk.js demo/test.js demo/ciDemo\",\"dev\":\"cross-env NODE_ENV=development node build.js --mode=development\",\"build\":\"cross-env NODE_ENV=production node build.js --mode=production\",\"sts.js\":\"node server/sts.js\"},\"repository\":{\"type\":\"git\",\"url\":\"http://github.com/tencentyun/cos-wx-sdk-v5.git\"},\"author\":\"carsonxu\",\"license\":\"ISC\",\"dependencies\":{\"@xmldom/xmldom\":\"^0.8.6\",\"mime\":\"^2.4.6\"},\"devDependencies\":{\"@babel/core\":\"7.17.9\",\"@babel/preset-env\":\"7.16.11\",\"babel-loader\":\"8.2.5\",\"body-parser\":\"^1.18.3\",\"cross-env\":\"^7.0.3\",\"express\":\"^4.17.1\",\"prettier\":\"^3.0.1\",\"qcloud-cos-sts\":\"^3.0.2\",\"terser-webpack-plugin\":\"4.2.3\",\"webpack\":\"4.46.0\",\"webpack-cli\":\"4.10.0\"}}");
74527452

74537453
/***/ }),
74547454

@@ -7522,12 +7522,20 @@ function sliceUploadFile(params, callback) {
75227522

75237523
// 上传分块完成,开始 uploadSliceComplete 操作
75247524
ep.on('upload_slice_complete', function (UploadData) {
7525+
var metaHeaders = {};
7526+
util.each(params.Headers, function (val, k) {
7527+
var shortKey = k.toLowerCase();
7528+
if (shortKey.indexOf('x-cos-meta-') === 0 || shortKey === 'pic-operations') {
7529+
metaHeaders[k] = val;
7530+
}
7531+
});
75257532
uploadSliceComplete.call(self, {
75267533
Bucket: Bucket,
75277534
Region: Region,
75287535
Key: Key,
75297536
UploadId: UploadData.UploadId,
75307537
SliceList: UploadData.SliceList,
7538+
Headers: metaHeaders,
75317539
tracker: tracker
75327540
}, function (err, data) {
75337541
if (!self._isRunningTask(TaskId)) return;
@@ -8167,6 +8175,7 @@ function uploadSliceComplete(params, callback) {
81678175
UploadId: UploadId,
81688176
Parts: Parts,
81698177
calledBySdk: 'sliceUploadFile',
8178+
Headers: params.Headers || {},
81708179
tracker: params.tracker
81718180
}, tryCallback);
81728181
}, function (err, data) {
@@ -12764,22 +12773,31 @@ function _submitRequest(params, callback) {
1276412773
return;
1276512774
}
1276612775

12776+
// 请求返回码不为 200
12777+
var statusCode = response.statusCode;
12778+
var statusSuccess = Math.floor(statusCode / 100) === 2; // 200 202 204 206
12779+
1276712780
// 不对 body 进行转换,body 直接挂载返回
12768-
var jsonRes;
1276912781
if (rawBody) {
12770-
jsonRes = {};
12771-
jsonRes.body = body;
12772-
} else {
12773-
try {
12774-
jsonRes = body && body.indexOf('<') > -1 && body.indexOf('>') > -1 && util.xml2json(body) || {};
12775-
} catch (e) {
12776-
jsonRes = body || {};
12782+
if (statusSuccess) {
12783+
return cb(null, {
12784+
body: body
12785+
});
12786+
} else {
12787+
// 报错但是返回了 ArrayBuffer,需要解析成 string
12788+
if (body instanceof ArrayBuffer) {
12789+
var errorStr = util.arrayBufferToString(body);
12790+
var json = util.parseResBody(errorStr);
12791+
var errorBody = json.Error || json;
12792+
return cb({
12793+
error: errorBody
12794+
});
12795+
}
1277712796
}
1277812797
}
1277912798

12780-
// 请求返回码不为 200
12781-
var statusCode = response.statusCode;
12782-
var statusSuccess = Math.floor(statusCode / 100) === 2; // 200 202 204 206
12799+
// 解析body,兼容 xml、json,解析失败时完整返回
12800+
var jsonRes = util.parseResBody(body);
1278312801
if (!statusSuccess) {
1278412802
cb({
1278512803
error: jsonRes.Error || jsonRes
@@ -14240,7 +14258,9 @@ var formatParams = function formatParams(apiName, params) {
1424014258
// SSE-COS、SSE-KMS
1424114259
'x-cos-server-side-encryption': 'ServerSideEncryption',
1424214260
'x-cos-server-side-encryption-cos-kms-key-id': 'SSEKMSKeyId',
14243-
'x-cos-server-side-encryption-context': 'SSEContext'
14261+
'x-cos-server-side-encryption-context': 'SSEContext',
14262+
// 上传时图片处理
14263+
'Pic-Operations': 'PicOperations'
1424414264
};
1424514265
util.each(headerMap, function (paramKey, headerKey) {
1424614266
if (params[paramKey] !== undefined) {
@@ -14626,6 +14646,46 @@ var simplifyPath = function simplifyPath(path) {
1462614646
}
1462714647
return '/' + stack.join('/');
1462814648
};
14649+
14650+
// 将ArrayBuffer转换为字符串
14651+
var arrayBufferToString = function arrayBufferToString(arrayBuffer) {
14652+
var decoder = new TextDecoder('utf-8');
14653+
return decoder.decode(arrayBuffer);
14654+
};
14655+
14656+
// 解析响应体,兼容 xml、json
14657+
var parseResBody = function parseResBody(responseBody) {
14658+
var json;
14659+
if (responseBody && typeof responseBody === 'string') {
14660+
var trimBody = responseBody.trim();
14661+
var isXml = trimBody.indexOf('<') === 0;
14662+
var isJson = trimBody.indexOf('{') === 0;
14663+
if (isXml) {
14664+
// xml 解析,解析失败返回{}
14665+
json = util.xml2json(responseBody) || {};
14666+
} else if (isJson) {
14667+
// json解析,解析失败返回原始 Body
14668+
try {
14669+
// 替换 json 中的换行符为空格,否则解析会出错
14670+
var formatBody = responseBody.replace(/\n/g, ' ');
14671+
var parsedBody = JSON.parse(formatBody);
14672+
// 确保解析出 json 对象
14673+
if (Object.prototype.toString.call(parsedBody) === '[object Object]') {
14674+
json = parsedBody;
14675+
} else {
14676+
json = responseBody;
14677+
}
14678+
} catch (e) {
14679+
json = responseBody;
14680+
}
14681+
} else {
14682+
json = responseBody;
14683+
}
14684+
} else {
14685+
json = responseBody || {};
14686+
}
14687+
return json;
14688+
};
1462914689
var util = {
1463014690
noop: noop,
1463114691
formatParams: formatParams,
@@ -14661,7 +14721,9 @@ var util = {
1466114721
error: error,
1466214722
getSourceParams: getSourceParams,
1466314723
encodeBase64: encodeBase64,
14664-
simplifyPath: simplifyPath
14724+
simplifyPath: simplifyPath,
14725+
arrayBufferToString: arrayBufferToString,
14726+
parseResBody: parseResBody
1466514727
};
1466614728
module.exports = util;
1466714729

demo-album/lib/cos-wx-sdk-v5.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

demo/ciDemo/mediaProcess.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ function getSnapshot() {
7171
},
7272
function (err, data) {
7373
if (err) {
74-
console.log('请求出错');
74+
console.log(err);
7575
} else {
7676
const imgBase64 = wx.arrayBufferToBase64(data.Body);
7777
console.log(imgBase64);

0 commit comments

Comments
 (0)