Skip to content

Commit 8d12e9b

Browse files
committed
支持多版本
1 parent e44abf6 commit 8d12e9b

File tree

7 files changed

+379
-218
lines changed

7 files changed

+379
-218
lines changed

demo/demo.js

Lines changed: 70 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ function putBucketCors() {
136136
"AllowedOrigin": ["*"],
137137
"AllowedMethod": ["GET", "POST", "PUT", "DELETE", "HEAD"],
138138
"AllowedHeader": ["*"],
139-
"ExposeHeader": ["ETag"],
139+
"ExposeHeader": ["ETag", "x-cos-acl", "x-cos-version-id", "x-cos-delete-marker", "x-cos-server-side-encryption"],
140140
"MaxAgeSeconds": "5"
141141
}]
142142
}
@@ -255,12 +255,12 @@ function putBucketLifecycle() {
255255
"Rules": [{
256256
'ID': 1,
257257
'Filter': {
258-
'Prefix': 'test123',
258+
'Prefix': 'cas',
259259
},
260260
'Status': 'Enabled',
261261
'Transition': {
262-
'Date': '2016-10-31T00:00:00+08:00',
263-
'StorageClass': 'STANDARD_IA'
262+
'Days': 0,
263+
'StorageClass': 'ARCHIVE'
264264
}
265265
}]
266266
}
@@ -309,6 +309,16 @@ function getBucketVersioning() {
309309
});
310310
}
311311

312+
function listObjectVersions() {
313+
cos.listObjectVersions({
314+
Bucket: config.Bucket, // Bucket 格式:test-1250000000
315+
Region: config.Region,
316+
Prefix: "1mb.zip"
317+
}, function (err, data) {
318+
console.log(err || JSON.stringify(data, null, ' '));
319+
});
320+
}
321+
312322
function putBucketReplication() {
313323
var AppId = config.Bucket.substr(config.Bucket.lastIndexOf('-') + 1);
314324
cos.putBucketReplication({
@@ -505,6 +515,22 @@ function deleteMultipleObject() {
505515
});
506516
}
507517

518+
function restoreObject() {
519+
cos.restoreObject({
520+
Bucket: config.Bucket, // Bucket 格式:test-1250000000
521+
Region: config.Region,
522+
Key: '1.txt',
523+
RestoreRequest: {
524+
Days: 1,
525+
CASJobParameters: {
526+
Tier: 'Expedited'
527+
}
528+
}
529+
}, function (err, data) {
530+
console.log(err || data);
531+
});
532+
}
533+
508534
function abortUploadTask() {
509535
cos.abortUploadTask({
510536
Bucket: config.Bucket, /* 必须 */ // Bucket 格式:test-1250000000
@@ -534,6 +560,9 @@ function sliceUploadFile() {
534560
Region: config.Region,
535561
Key: filename, /* 必须 */
536562
FilePath: filepath, /* 必须 */
563+
Headers: {
564+
'test': '123',
565+
},
537566
TaskReady: function (tid) {
538567
TaskId = tid;
539568
},
@@ -565,6 +594,40 @@ function restartTask() {
565594
console.log('restart');
566595
}
567596

597+
function uploadFiles() {
598+
var filename = 'mb.zip';
599+
var blob = util.createFile({size: 1024 * 1024 * 10});
600+
cos.uploadFiles({
601+
files: [{
602+
Bucket: config.Bucket, // Bucket 格式:test-1250000000
603+
Region: config.Region,
604+
Key: '1' + filename,
605+
Body: blob,
606+
}, {
607+
Bucket: config.Bucket, // Bucket 格式:test-1250000000
608+
Region: config.Region,
609+
Key: '2' + filename,
610+
Body: blob,
611+
}, {
612+
Bucket: config.Bucket, // Bucket 格式:test-1250000000
613+
Region: config.Region,
614+
Key: '3' + filename,
615+
Body: blob,
616+
}],
617+
SliceSize: 1024 * 1024,
618+
onProgress: function (info) {
619+
var percent = parseInt(info.percent * 10000) / 100;
620+
var speed = parseInt(info.speed / 1024 / 1024 * 100) / 100;
621+
console.log('进度:' + percent + '%; 速度:' + speed + 'Mb/s;');
622+
},
623+
onFileFinish: function (err, data, options) {
624+
console.log(options.Key + ' 上传' + (err ? '失败' : '完成'));
625+
},
626+
}, function (err, data) {
627+
console.log(err || data);
628+
});
629+
}
630+
568631
getService();
569632
// getAuth();
570633
// getObjectUrl();
@@ -586,6 +649,7 @@ getService();
586649
// putBucketLifecycle();
587650
// deleteBucketLifecycle();
588651
// getBucketVersioning();
652+
// listObjectVersions();
589653
// putBucketVersioning();
590654
// getBucketReplication();
591655
// putBucketReplication();
@@ -599,8 +663,10 @@ getService();
599663
// getObjectAcl();
600664
// deleteObject();
601665
// deleteMultipleObject();
666+
// restoreObject();
602667
// abortUploadTask();
603668
// sliceUploadFile();
604669
// cancelTask();
605670
// pauseTask();
606671
// restartTask();
672+
// uploadFiles();

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.2.6",
3+
"version": "2.3.0",
44
"description": "cos nodejs sdk v5",
55
"main": "index.js",
66
"scripts": {

sdk/advance.js

Lines changed: 93 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ function sliceUploadFile(params, callback) {
8181
Bucket: Bucket,
8282
Region: Region,
8383
Key: Key,
84+
Headers: params.Headers,
8485
StorageClass: StorageClass,
8586
FilePath: FilePath,
8687
FileSize: FileSize,
@@ -208,7 +209,7 @@ function getUploadIdAndPartList(params, callback) {
208209
return callback(errData);
209210
});
210211

211-
// 不存在 UploadId
212+
// 存在 UploadId
212213
ep.on('upload_id_ready', function (UploadData) {
213214
// 转换成 map
214215
var map = {};
@@ -242,6 +243,7 @@ function getUploadIdAndPartList(params, callback) {
242243
Bucket: Bucket,
243244
Region: Region,
244245
Key: Key,
246+
Headers: params.Headers,
245247
StorageClass: StorageClass,
246248
});
247249
self.multipartInit(_params, function (err, data) {
@@ -418,8 +420,8 @@ function uploadSliceList(params, cb) {
418420
SliceSize: SliceSize,
419421
FileSize: FileSize,
420422
PartNumber: PartNumber,
423+
ServerSideEncryption: ServerSideEncryption,
421424
FilePath: FilePath,
422-
ServerSideEncryption: ServerSideEncryption,
423425
UploadData: UploadData,
424426
onProgress: function (data) {
425427
FinishSize += data.loaded - preAddSize;
@@ -566,6 +568,7 @@ function abortUploadTask(params, callback) {
566568
Bucket: Bucket,
567569
Region: Region,
568570
Key: Key,
571+
Headers: params.Headers,
569572
AsyncLimit: AsyncLimit,
570573
AbortArray: AbortArray
571574
}, function (err, data) {
@@ -638,6 +641,7 @@ function abortUploadTaskArray(params, callback) {
638641
Bucket: Bucket,
639642
Region: Region,
640643
Key: AbortItem.Key,
644+
Headers: params.Headers,
641645
UploadId: UploadId
642646
}, function (err, data) {
643647
var task = {
@@ -678,9 +682,96 @@ function abortUploadTaskArray(params, callback) {
678682
}
679683

680684

685+
// 批量上传文件
686+
function uploadFiles(params, callback) {
687+
var self = this;
688+
689+
// 判断多大的文件使用分片上传
690+
var SliceSize = params.SliceSize === undefined ? self.options.SliceSize : params.SliceSize;
691+
692+
// 汇总返回进度
693+
var TotalSize = 0;
694+
var TotalFinish = 0;
695+
var onTotalProgress = util.throttleOnProgress.call(self, TotalFinish, params.onProgress);
696+
697+
// 汇总返回回调
698+
var unFinishCount = params.files.length;
699+
var _onTotalFileFinish = params.onFileFinish;
700+
var resultList = Array(unFinishCount);
701+
var onTotalFileFinish = function (err, data, options) {
702+
onTotalProgress(null, true);
703+
_onTotalFileFinish && _onTotalFileFinish(err, data, options);
704+
resultList[options.Index] = {
705+
options: options,
706+
error: err,
707+
data: data
708+
};
709+
if (--unFinishCount <= 0 && callback) {
710+
callback(null, {
711+
files: resultList,
712+
});
713+
}
714+
};
715+
716+
// 开始处理每个文件
717+
var taskList = [];
718+
util.each(params.files, function (fileParams, index) {
719+
720+
var Body = fileParams.Body;
721+
var FileSize = Body.size || Body.length || 0;
722+
var fileInfo = {Index: index, TaskId: ''};
723+
724+
// 更新文件总大小
725+
TotalSize += FileSize;
726+
727+
// 整理 option,用于返回给回调
728+
util.each(fileParams, function (v, k) {
729+
if (typeof v !== 'object' && typeof v !== 'function') {
730+
fileInfo[k] = v;
731+
}
732+
});
733+
734+
// 处理单个文件 TaskReady
735+
var _TaskReady = fileParams.TaskReady;
736+
var TaskReady = function (tid) {
737+
fileInfo.TaskId = tid;
738+
_TaskReady && _TaskReady(tid);
739+
};
740+
fileParams.TaskReady = TaskReady;
741+
742+
// 处理单个文件进度
743+
var PreAddSize = 0;
744+
var _onProgress = fileParams.onProgress;
745+
var onProgress = function (info) {
746+
TotalFinish = TotalFinish - PreAddSize + info.loaded;
747+
PreAddSize = info.loaded;
748+
_onProgress && _onProgress(info);
749+
onTotalProgress({loaded: TotalFinish, total: TotalSize});
750+
};
751+
fileParams.onProgress = onProgress;
752+
753+
// 处理单个文件完成
754+
var _onFileFinish = fileParams.onFileFinish;
755+
var onFileFinish = function (err, data) {
756+
_onFileFinish && _onFileFinish(err, data);
757+
onTotalFileFinish && onTotalFileFinish(err, data, fileInfo);
758+
};
759+
760+
// 添加上传任务
761+
taskList.push({
762+
api: FileSize >= SliceSize ? 'sliceUploadFile' : 'putObject',
763+
params: fileParams,
764+
callback: onFileFinish,
765+
});
766+
});
767+
self._addTasks(taskList);
768+
}
769+
770+
681771
var API_MAP = {
682772
sliceUploadFile: sliceUploadFile,
683773
abortUploadTask: abortUploadTask,
774+
uploadFiles: uploadFiles,
684775
};
685776

686777
util.each(API_MAP, function (fn, apiName) {

0 commit comments

Comments
 (0)