Skip to content

Commit 04e1187

Browse files
committed
Merge branch 'dev/1.10.0' into dev/strictSign
2 parents 8cd11ed + 60f4ba5 commit 04e1187

File tree

10 files changed

+841
-33
lines changed

10 files changed

+841
-33
lines changed

demo/CIDemos/mediaProcess.js

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -368,30 +368,32 @@ export const postTranscode = {
368368
// Transcode 转码参数
369369
Transcode: {
370370
Container: {
371-
Format: 'mp4'
371+
Format: 'mp4',
372372
},
373373
Video: {
374374
Width: '1280',
375375
Height: '720',
376-
Crf: 30
376+
Crf: 30,
377377
},
378378
Audio: {
379-
Codec: 'aac'
380-
}
379+
Codec: 'aac',
380+
},
381381
},
382382
// Watermark 水印参数
383-
Watermark: [{
384-
Type: 'Text',
385-
Pos: 'BottomRight',
386-
LocMode: 'Absolute',
387-
Text: {
388-
FontSize: '10',
389-
FontType: 'simfang.ttf',
390-
FontColor: '0x000000',
391-
Transparency: '100',
392-
Text: 'TencendCloud'
383+
Watermark: [
384+
{
385+
Type: 'Text',
386+
Pos: 'BottomRight',
387+
LocMode: 'Absolute',
388+
Text: {
389+
FontSize: '10',
390+
FontType: 'simfang.ttf',
391+
FontColor: '0x000000',
392+
Transparency: '100',
393+
Text: 'TencendCloud',
394+
},
393395
},
394-
}],
396+
],
395397
Output: {
396398
// 存储桶的地域;是否必传:是
397399
Region: config.Region,

demo/index.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,16 @@ <h1>
255255
UploadCheckContentMd5: true,
256256
// BeaconReporter: BeaconAction, // 开启灯塔上报
257257
// ClsReporter: clsClient, // 开启 cls 上报
258+
// 本地日志相关
259+
// EnableLog: true,
260+
// EnableLogcat: true,
261+
// ClsLogger: clsClient,
262+
// LogLevel: 'VERBOSE',
263+
// LogExtras: { userId: '123' }
258264
});
265+
// cos.on('log-message', msg => {
266+
// console.log(msg);
267+
// });
259268

260269
var util = {
261270
createFile: function (options) {

dist/cos-js-sdk-v5.js

Lines changed: 378 additions & 7 deletions
Large diffs are not rendered by default.

dist/cos-js-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.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cos-js-sdk-v5",
3-
"version": "1.11.0-beta.0",
3+
"version": "1.11.0-beta.1",
44
"description": "JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)",
55
"main": "dist/cos-js-sdk-v5.js",
66
"types": "index.d.ts",

src/advance.js

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ function sliceUploadFile(params, callback) {
2424

2525
var tracker = params.tracker;
2626
tracker && tracker.setParams({ chunkSize: ChunkSize });
27+
self.logger.info({ cate: 'PROCESS', tag: 'upload', msg: `[key=${params.Key}] 分块上传开始` });
2728

2829
// 上传过程中出现错误,返回错误
2930
ep.on('error', function (err) {
@@ -32,6 +33,11 @@ function sliceUploadFile(params, callback) {
3233
session.removeUsing(params.UploadData.UploadId);
3334
}
3435
err.UploadId = params.UploadData.UploadId || '';
36+
self.logger.error({
37+
cate: 'RESULT',
38+
tag: 'upload',
39+
msg: `[key=${params.Key}] 分块上传失败: ${JSON.stringify(err)}`,
40+
});
3541
return callback(err);
3642
});
3743

@@ -58,6 +64,7 @@ function sliceUploadFile(params, callback) {
5864
metaHeaders[k] = val;
5965
}
6066
});
67+
self.logger.info({ cate: 'PROCESS', tag: 'upload', msg: `[key=${params.Key}] 开始完成分块请求` });
6168
uploadSliceComplete.call(
6269
self,
6370
{
@@ -74,10 +81,12 @@ function sliceUploadFile(params, callback) {
7481
session.removeUsing(UploadData.UploadId);
7582
if (err) {
7683
onProgress(null, true);
84+
self.logger.error({ cate: 'RESULT', tag: 'upload', msg: `[key=${params.Key}] 完成分块请求失败` });
7785
return ep.emit('error', err);
7886
}
7987
session.removeUploadId.call(self, UploadData.UploadId);
8088
onProgress({ loaded: FileSize, total: FileSize }, true);
89+
self.logger.info({ cate: 'RESULT', tag: 'upload', msg: `[key=${params.Key}] 完成分块请求成功` });
8190
ep.emit('upload_complete', data);
8291
}
8392
);
@@ -92,6 +101,7 @@ function sliceUploadFile(params, callback) {
92101

93102
// 获取 UploadId
94103
onProgress(null, true); // 任务状态开始 uploading
104+
self.logger.info({ cate: 'PROCESS', tag: 'upload', msg: `[key=${params.Key}] 开始上传各个分块` });
95105
uploadSliceList.call(
96106
self,
97107
{
@@ -113,8 +123,10 @@ function sliceUploadFile(params, callback) {
113123
if (!self._isRunningTask(TaskId)) return;
114124
if (err) {
115125
onProgress(null, true);
126+
self.logger.error({ cate: 'PROCESS', tag: 'upload', msg: `[key=${params.Key}] 分块上传失败` });
116127
return ep.emit('error', err);
117128
}
129+
self.logger.info({ cate: 'PROCESS', tag: 'upload', msg: `[key=${params.Key}] 所有分块上传完成` });
118130
ep.emit('upload_slice_complete', data);
119131
}
120132
);
@@ -125,6 +137,11 @@ function sliceUploadFile(params, callback) {
125137
onProgress = util.throttleOnProgress.call(self, FileSize, params.onProgress);
126138

127139
if (params.UploadData.UploadId) {
140+
self.logger.info({
141+
cate: 'PROCESS',
142+
tag: 'upload',
143+
msg: `[key=${params.Key}] 已经获取到 uploadId, ${params.UploadData.UploadId}`,
144+
});
128145
ep.emit('get_upload_data_finish', params.UploadData);
129146
} else {
130147
var _params = util.extend(
@@ -143,11 +160,17 @@ function sliceUploadFile(params, callback) {
143160
},
144161
params
145162
);
163+
self.logger.info({ cate: 'PROCESS', tag: 'upload', msg: `[key=${params.Key}] 去获取 uploadId` });
146164
getUploadIdAndPartList.call(self, _params, function (err, UploadData) {
147165
if (!self._isRunningTask(TaskId)) return;
148166
if (err) return ep.emit('error', err);
149167
params.UploadData.UploadId = UploadData.UploadId;
150168
params.UploadData.PartList = UploadData.PartList;
169+
self.logger.info({
170+
cate: 'PROCESS',
171+
tag: 'upload',
172+
msg: `[key=${params.Key}] 获取到 uploadId, ${params.UploadData.UploadId}`,
173+
});
151174
ep.emit('get_upload_data_finish', params.UploadData);
152175
});
153176
}
@@ -179,6 +202,7 @@ function sliceUploadFile(params, callback) {
179202
params.Body = '';
180203
params.ContentLength = 0;
181204
params.SkipTask = true;
205+
self.logger.info({ cate: 'PROCESS', tag: 'upload', msg: `[key=${params.Key}] 文件大小为 0,执行简单上传` });
182206
self.putObject(params, callback);
183207
} else {
184208
ep.emit('get_file_size_finish');
@@ -319,13 +343,22 @@ function getUploadIdAndPartList(params, callback) {
319343
var headers = util.clone(params.Headers);
320344
delete headers['x-cos-mime-limit'];
321345
_params.Headers = headers;
346+
self.logger.info({ cate: 'PROCESS', tag: 'upload', msg: `[key=${params.Key}] 准备初始化分块上传` });
322347
self.multipartInit(_params, function (err, data) {
323348
if (!self._isRunningTask(TaskId)) return;
324-
if (err) return ep.emit('error', err);
349+
if (err) {
350+
self.logger.error({
351+
cate: 'PROCESS',
352+
tag: 'upload',
353+
msg: `[key=${params.Key}] 初始化分块上传失败, ${JSON.stringify(err)}`,
354+
});
355+
return ep.emit('error', err);
356+
}
325357
var UploadId = data.UploadId;
326358
if (!UploadId) {
327359
return callback(util.error(new Error('no such upload id')));
328360
}
361+
self.logger.info({ cate: 'PROCESS', tag: 'upload', msg: `[key=${params.Key}] 初始化分块上传成功` });
329362
ep.emit('upload_id_available', { UploadId: UploadId, PartList: [] });
330363
});
331364
});
@@ -584,6 +617,7 @@ function uploadSliceList(params, cb) {
584617
});
585618
var onProgress = params.onProgress;
586619

620+
self.logger.info({ cate: 'PROCESS', tag: 'upload', msg: `[key=${params.Key}] 开始并发上传各个分块` });
587621
Async.eachLimit(
588622
needUploadSlices,
589623
ChunkParallel,
@@ -593,6 +627,7 @@ function uploadSliceList(params, cb) {
593627
var currentSize =
594628
Math.min(FileSize, SliceItem['PartNumber'] * SliceSize) - (SliceItem['PartNumber'] - 1) * SliceSize;
595629
var preAddSize = 0;
630+
self.logger.info({ cate: 'PROCESS', tag: 'upload', msg: `[key=${params.Key}] 分块${PartNumber}开始上传` });
596631
uploadSliceItem.call(
597632
self,
598633
{
@@ -616,15 +651,23 @@ function uploadSliceList(params, cb) {
616651
},
617652
function (err, data) {
618653
if (!self._isRunningTask(TaskId)) return;
619-
if (!err && !data.ETag)
654+
if (!err && !data.ETag) {
620655
err =
621656
'get ETag error, please add "ETag" to CORS ExposeHeader setting.( 获取ETag失败,请在CORS ExposeHeader设置中添加ETag,请参考文档:https://cloud.tencent.com/document/product/436/13318 )';
657+
self.logger.error({
658+
cate: 'PROCESS',
659+
tag: 'upload',
660+
msg: `[key=${params.Key}] 分块${PartNumber}上传请求成功,但是未获取到 eTag`,
661+
});
662+
}
622663
if (err) {
623664
FinishSize -= preAddSize;
665+
self.logger.info({ cate: 'RESULT', tag: 'upload', msg: `[key=${params.Key}] 分块${PartNumber}上传失败` });
624666
} else {
625667
FinishSize += currentSize - preAddSize;
626668
SliceItem.ETag = data.ETag;
627669
}
670+
self.logger.info({ cate: 'RESULT', tag: 'upload', msg: `[key=${params.Key}] 分块${PartNumber}上传成功` });
628671
onProgress({ loaded: FinishSize, total: FileSize });
629672
asyncCallback(err || null, data);
630673
}

src/base.js

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2116,6 +2116,8 @@ function listObjectVersions(params, callback) {
21162116
* @param {Object} data 为对应的 object 数据,包括 body 和 headers
21172117
*/
21182118
function getObject(params, callback) {
2119+
var self = this;
2120+
self.logger.info({ cate: 'PROCESS', tag: 'download', msg: `[key=${params.Key}] getObject开始` });
21192121
if (this.options.ObjectKeySimplifyCheck) {
21202122
// getObject 的 Key 需要校验,避免调用成 getBucket
21212123
var formatKey = util.simplifyPath(params.Key);
@@ -2172,6 +2174,7 @@ function getObject(params, callback) {
21722174
statusCode: data.statusCode,
21732175
headers: data.headers,
21742176
});
2177+
self.logger.info({ cate: 'PROCESS', tag: 'download', msg: `[key=${params.Key}] getObject结束` });
21752178
}
21762179
);
21772180
}
@@ -2209,6 +2212,7 @@ function putObject(params, callback) {
22092212
var self = this;
22102213
var FileSize = params.ContentLength;
22112214
var onProgress = util.throttleOnProgress.call(self, FileSize, params.onProgress);
2215+
self.logger.info({ cate: 'PROCESS', tag: 'upload', msg: `[key=${params.Key}] putObject开始` });
22122216

22132217
// 特殊处理 Cache-Control、Content-Type,避免代理更改这两个字段导致写入到 Object 属性里
22142218
var headers = params.Headers;
@@ -2220,12 +2224,18 @@ function putObject(params, callback) {
22202224

22212225
var tracker = params.tracker;
22222226
needCalcMd5 && tracker && tracker.setParams({ md5StartTime: new Date().getTime() });
2227+
needCalcMd5 && self.logger.debug({ cate: 'PROCESS', tag: 'upload', msg: `[key=${params.Key}] 开始计算 md5` });
22232228

22242229
util.getBodyMd5(
22252230
needCalcMd5,
22262231
params.Body,
22272232
function (md5) {
22282233
if (md5) {
2234+
self.logger.debug({
2235+
cate: 'PROCESS',
2236+
tag: 'upload',
2237+
msg: `[key=${params.Key}] md5: ${md5},md5Base64=${util.b64(md5)}`,
2238+
});
22292239
tracker && tracker.setParams({ md5EndTime: new Date().getTime() });
22302240
if (self.options.UploadCheckContentMd5) headers['Content-MD5'] = util.b64(md5);
22312241
if (params.UploadAddMetaMd5 || self.options.UploadAddMetaMd5) headers['x-cos-meta-md5'] = md5;
@@ -2249,6 +2259,7 @@ function putObject(params, callback) {
22492259
},
22502260
function (err, data) {
22512261
if (err) {
2262+
self.logger.error({ cate: 'ERROR', tag: 'upload', msg: `上传失败,错误信息:${JSON.stringify(err)}` });
22522263
onProgress(null, true);
22532264
return callback(err);
22542265
}
@@ -2264,6 +2275,8 @@ function putObject(params, callback) {
22642275
url = url.substr(url.indexOf('://') + 3);
22652276
data.Location = url;
22662277
data.ETag = util.attr(data.headers, 'etag', '');
2278+
self.logger.info({ cate: 'RESULT', tag: 'upload', msg: `上传成功,Location=${url}` });
2279+
self.logger.info({ cate: 'PROCESS', tag: 'upload', msg: `[key=${params.Key}] putObject结束` });
22672280
callback(null, data);
22682281
}
22692282
);
@@ -3972,10 +3985,14 @@ function allowRetry(err) {
39723985
}
39733986
} else if (Math.floor(err.statusCode / 100) === 5) {
39743987
canRetry = true;
3988+
networkError = false;
3989+
} else if(err.message === 'timeout') {
3990+
canRetry = true;
3991+
networkError = self.options.AutoSwitchHost;
39753992
} else if (err.message === 'CORS blocked or network error') {
39763993
// 跨域/网络错误都包含在内
3977-
networkError = true;
3978-
canRetry = self.options.AutoSwitchHost;
3994+
canRetry = true;
3995+
networkError = self.options.AutoSwitchHost;
39793996
}
39803997
}
39813998
return { canRetry, networkError };
@@ -4068,6 +4085,18 @@ function submitRequest(params, callback) {
40684085
// 更换要签的host
40694086
SignHost = SignHost.replace(/myqcloud.com/, 'tencentcos.cn');
40704087
}
4088+
const logParams = {
4089+
...params,
4090+
Query,
4091+
SignHost,
4092+
ForceSignHost: self.options.ForceSignHost,
4093+
};
4094+
delete logParams.tracker;
4095+
self.logger.debug({
4096+
cate: 'PROCESS',
4097+
tag: 'base',
4098+
msg: `开始计算签名, opt=${JSON.stringify(logParams)}`,
4099+
});
40714100
getAuthorizationAsync.call(
40724101
self,
40734102
{
@@ -4086,11 +4115,14 @@ function submitRequest(params, callback) {
40864115
},
40874116
function (err, AuthData) {
40884117
if (err) {
4118+
self.logger.error({ cate: 'PROCESS', tag: 'base', msg: `签名获取失败, err=${JSON.stringify(err.message)}` });
40894119
callback(err);
40904120
return;
40914121
}
40924122
tracker && tracker.setParams({ signEndTime: new Date().getTime(), httpStartTime: new Date().getTime() });
40934123
params.AuthData = AuthData;
4124+
self.logger.debug({ cate: 'PROCESS', tag: 'base', msg: `签名获取成功` });
4125+
self.logger.info({ cate: 'PROCESS', tag: 'base', msg: `准备发起请求` });
40944126
_submitRequest.call(self, params, function (err, data) {
40954127
tracker && tracker.setParams({ httpEndTime: new Date().getTime() });
40964128
let canRetry = false;
@@ -4099,8 +4131,13 @@ function submitRequest(params, callback) {
40994131
const info = allowRetry.call(self, err);
41004132
canRetry = info.canRetry || oldClockOffset !== self.options.SystemClockOffset;
41014133
networkError = info.networkError;
4134+
self.logger.error({
4135+
cate: 'PROCESS',
4136+
tag: 'network',
4137+
msg: `请求失败, err=${JSON.stringify(err)}, canRetry=${canRetry}, networkError=${networkError}, tryTimes=${tryTimes}`,
4138+
});
41024139
}
4103-
if (err && tryTimes < 2 && canRetry) {
4140+
if (err && tryTimes < 4 && canRetry) {
41044141
if (params.headers) {
41054142
delete params.headers.Authorization;
41064143
delete params.headers['token'];
@@ -4118,8 +4155,10 @@ function submitRequest(params, callback) {
41184155
params.SwitchHost = switchHost;
41194156
// 重试时增加请求头
41204157
params.headers['x-cos-sdk-retry'] = true;
4158+
self.logger.info({ cate: 'PROCESS', tag: 'base', msg: `重试请求, 重试第${tryTimes}次` });
41214159
next(tryTimes + 1);
41224160
} else {
4161+
self.logger.info({ cate: 'PROCESS', tag: 'base', msg: `请求完成` });
41234162
callback(err, data);
41244163
}
41254164
});
@@ -4222,6 +4261,12 @@ function _submitRequest(params, callback) {
42224261
opt.timeout = this.options.Timeout;
42234262
}
42244263
self.options.ForcePathStyle && (opt.pathStyle = self.options.ForcePathStyle);
4264+
var requestUid = util.uuid();
4265+
self.logger.info({
4266+
cate: 'PROCESS',
4267+
tag: 'network',
4268+
msg: `[Request] ${requestUid}, requestOpt=${JSON.stringify(opt)}`,
4269+
});
42254270
self.emit('before-send', opt);
42264271
var useAccelerate = opt.url.includes('accelerate.');
42274272
var queryString = opt.qs
@@ -4265,6 +4310,12 @@ function _submitRequest(params, callback) {
42654310
statusMessage: receive.statusMessage,
42664311
headers: receive.headers,
42674312
};
4313+
var result = err ? '[error]' : '[success]';
4314+
self.logger.info({
4315+
cate: 'PROCESS',
4316+
tag: 'network',
4317+
msg: `[Response] ${requestUid}, ${result}, response=${JSON.stringify(response)}`,
4318+
});
42684319

42694320
var hasReturned;
42704321
var cb = function (err, data) {

0 commit comments

Comments
 (0)