Skip to content

Commit 43d9704

Browse files
authored
Dev/2.13.2 (#200)
* upd: uploadFiles 支持传入 Body * fix: 类型优化
1 parent 82b7778 commit 43d9704

File tree

5 files changed

+69
-52
lines changed

5 files changed

+69
-52
lines changed

index.d.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ declare namespace COS {
127127
/** 上传/下载的进度回调方法 */
128128
type onProgress = (params: ProgressInfo) => any;
129129

130+
type CopySourceParserFunction = (source: string) => null | { Bucket: string; Region: string; Key: string };
131+
130132
// 实例参数
131133
interface COSOptions {
132134
/** 固定密钥的 SecretId,可从{@link https://console.cloud.tencent.com/cam/capi|API密钥管理}获取 */
@@ -199,6 +201,8 @@ declare namespace COS {
199201
/** 默认将host加入签名计算,关闭后可能导致越权风险,建议保持为true */
200202
ForceSignHost?: boolean;
201203
AutoSwitchHost?: boolean;
204+
/** 自定义拷贝源解析器 */
205+
CopySourceParser?: null | CopySourceParserFunction;
202206
/** 获取签名的回调方法,如果没有 SecretId、SecretKey 时,必选 */
203207
getAuthorization?: (
204208
options: GetAuthorizationOptions,
@@ -1808,7 +1812,9 @@ Bulk:批量模式,恢复时间为24 - 48小时。 */
18081812
// uploadFiles
18091813
type UploadFileItemParams = (PutObjectParams | SliceUploadFileParams) & {
18101814
/** 要上传的本地文件路径 */
1811-
FilePath: string;
1815+
FilePath?: string;
1816+
/** 要上传对象内容 */
1817+
Body?: UploadBody;
18121818
/** 上传的进度回调方法 */
18131819
onProgress?: onProgress;
18141820
/** 上传完成回调方法 */

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cos-nodejs-sdk-v5",
3-
"version": "2.13.1",
3+
"version": "2.13.2",
44
"description": "cos nodejs sdk v5",
55
"main": "index.js",
66
"types": "index.d.ts",

sdk/advance.js

Lines changed: 59 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -971,60 +971,70 @@ function uploadFiles(params, callback) {
971971
var taskList = [];
972972
var count = params.files.length;
973973
util.each(params.files, function (fileParams, index) {
974-
fs.stat(fileParams.FilePath, function (err, stat) {
975-
var isDir = stat ? stat.isDirectory() : false;
976-
var FileSize = (fileParams.ContentLength = stat ? stat.size : 0);
977-
var fileInfo = { Index: index, TaskId: '' };
978-
979-
// 更新文件总大小
980-
TotalSize += FileSize;
981-
982-
// 整理 option,用于返回给回调
983-
util.each(fileParams, function (v, k) {
984-
if (typeof v !== 'object' && typeof v !== 'function') {
985-
fileInfo[k] = v;
986-
}
974+
var isDir = false;
975+
var FileSize = 0;
976+
if (fileParams.Body) {
977+
util.getFileSize('putObject', fileParams, function (err, size) {
978+
FileSize = fileParams.ContentLengt = size;
987979
});
980+
} else if (fileParams.FilePath) {
981+
var stat;
982+
try {
983+
stat = fs.statSync(fileParams.FilePath);
984+
} catch (e) {}
985+
isDir = stat ? stat.isDirectory() : false;
986+
FileSize = fileParams.ContentLength = stat ? stat.size : 0;
987+
}
988+
var fileInfo = { Index: index, TaskId: '' };
988989

989-
// 处理单个文件 TaskReady
990-
var _onTaskReady = fileParams.onTaskReady;
991-
var onTaskReady = function (tid) {
992-
fileInfo.TaskId = tid;
993-
_onTaskReady && _onTaskReady(tid);
994-
};
995-
fileParams.onTaskReady = onTaskReady;
996-
997-
// 处理单个文件进度
998-
var PreAddSize = 0;
999-
var _onProgress = fileParams.onProgress;
1000-
var onProgress = function (info) {
1001-
TotalFinish = TotalFinish - PreAddSize + info.loaded;
1002-
PreAddSize = info.loaded;
1003-
_onProgress && _onProgress(info);
1004-
onTotalProgress({ loaded: TotalFinish, total: TotalSize });
1005-
};
1006-
fileParams.onProgress = onProgress;
1007-
1008-
// 处理单个文件完成
1009-
var _onFileFinish = fileParams.onFileFinish;
1010-
var onFileFinish = function (err, data) {
1011-
_onFileFinish && _onFileFinish(err, data);
1012-
onTotalFileFinish && onTotalFileFinish(err, data, fileInfo);
1013-
};
990+
// 更新文件总大小
991+
TotalSize += FileSize;
1014992

1015-
// 添加上传任务
1016-
var api = FileSize <= SliceSize || isDir ? 'putObject' : 'sliceUploadFile';
1017-
if (api === 'putObject') {
1018-
fileParams.Body = isDir ? '' : fs.createReadStream(fileParams.FilePath);
1019-
fileParams.Body.isSdkCreated = true;
993+
// 整理 option,用于返回给回调
994+
util.each(fileParams, function (v, k) {
995+
if (typeof v !== 'object' && typeof v !== 'function') {
996+
fileInfo[k] = v;
1020997
}
1021-
taskList.push({
1022-
api: api,
1023-
params: fileParams,
1024-
callback: onFileFinish,
1025-
});
1026-
--count === 0 && self._addTasks(taskList);
1027998
});
999+
1000+
// 处理单个文件 TaskReady
1001+
var _onTaskReady = fileParams.onTaskReady;
1002+
var onTaskReady = function (tid) {
1003+
fileInfo.TaskId = tid;
1004+
_onTaskReady && _onTaskReady(tid);
1005+
};
1006+
fileParams.onTaskReady = onTaskReady;
1007+
1008+
// 处理单个文件进度
1009+
var PreAddSize = 0;
1010+
var _onProgress = fileParams.onProgress;
1011+
var onProgress = function (info) {
1012+
TotalFinish = TotalFinish - PreAddSize + info.loaded;
1013+
PreAddSize = info.loaded;
1014+
_onProgress && _onProgress(info);
1015+
onTotalProgress({ loaded: TotalFinish, total: TotalSize });
1016+
};
1017+
fileParams.onProgress = onProgress;
1018+
1019+
// 处理单个文件完成
1020+
var _onFileFinish = fileParams.onFileFinish;
1021+
var onFileFinish = function (err, data) {
1022+
_onFileFinish && _onFileFinish(err, data);
1023+
onTotalFileFinish && onTotalFileFinish(err, data, fileInfo);
1024+
};
1025+
1026+
// 添加上传任务,传入 Body 则只支持简单上传
1027+
var api = FileSize <= SliceSize || isDir || fileParams.Body ? 'putObject' : 'sliceUploadFile';
1028+
if (api === 'putObject' && fileParams.FilePath && !fileParams.Body) {
1029+
fileParams.Body = isDir ? '' : fs.createReadStream(fileParams.FilePath);
1030+
fileParams.Body.isSdkCreated = true;
1031+
}
1032+
taskList.push({
1033+
api: api,
1034+
params: fileParams,
1035+
callback: onFileFinish,
1036+
});
1037+
--count === 0 && self._addTasks(taskList);
10281038
});
10291039
}
10301040

sdk/base.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3092,7 +3092,7 @@ function multipartComplete(params, callback) {
30923092
protocol: self.options.Protocol,
30933093
domain: self.options.Domain,
30943094
bucket: params.Bucket,
3095-
region: params.Region,
3095+
region: !self.options.UseAccelerate ? params.Region : 'accelerate',
30963096
object: params.Key,
30973097
isLocation: true,
30983098
});

sdk/cos.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ var defaultOptions = {
4545
ConfCwd: '',
4646
ForceSignHost: true, // 默认将host加入签名计算,关闭后可能导致越权风险,建议保持为true
4747
AutoSwitchHost: true,
48+
CopySourceParser: null, // 自定义拷贝源解析器
4849
// 动态秘钥,优先级Credentials > SecretId/SecretKey。注意Cred内是小写的secretId、secretKey
4950
Credentials: {
5051
secretId: '',

0 commit comments

Comments
 (0)