Skip to content

Commit df0c2a1

Browse files
committed
fix(cos): flush more than 1000 files bucket
1 parent 5a5af1f commit df0c2a1

File tree

1 file changed

+26
-22
lines changed

1 file changed

+26
-22
lines changed

src/modules/cos/index.ts

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -463,41 +463,45 @@ export default class Cos {
463463
}
464464
}
465465

466-
async flushBucketFiles(bucket: string) {
467-
console.log(`Start to clear all files in bucket ${bucket}`);
468-
let detail;
466+
async getBucketObjects(bucket: string) {
469467
try {
470-
detail = await this.getBucket({
468+
const detail = await this.getBucket({
471469
bucket,
472470
});
471+
const contents = detail.Contents && detail.Contents.length > 0 ? detail.Contents : [];
472+
const objectKeyList = contents.map((item) => {
473+
return {
474+
Key: item.Key,
475+
};
476+
});
477+
return objectKeyList;
473478
} catch (err) {
474479
const e = convertCosError(err);
475480
if (e.code === 'NoSuchBucket') {
476481
console.log(`Bucket ${bucket} not exist`);
477-
return;
482+
return [];
478483
}
484+
throw err;
479485
}
486+
}
480487

481-
if (detail) {
482-
if (detail.Contents && detail.Contents.length > 0) {
483-
// delete files
484-
const objectList = (detail.Contents || []).map((item) => {
485-
return {
486-
Key: item.Key,
487-
};
488+
async flushBucketFiles(bucket: string) {
489+
try {
490+
console.log(`Start to clear all files in bucket ${bucket}`);
491+
let objects = await this.getBucketObjects(bucket);
492+
// 由于 cos 服务一次只能获取 1000 个 object,所以需要循环每次删除 1000 个 object
493+
while (objects.length > 0) {
494+
await this.cosClient.deleteMultipleObject({
495+
Region: this.region,
496+
Bucket: bucket,
497+
Objects: objects,
488498
});
489499

490-
try {
491-
await this.cosClient.deleteMultipleObject({
492-
Region: this.region,
493-
Bucket: bucket,
494-
Objects: objectList,
495-
});
496-
console.log(`Clear all files in bucket ${bucket} success`);
497-
} catch (err) {
498-
console.log(err);
499-
}
500+
objects = await this.getBucketObjects(bucket);
500501
}
502+
console.log(`Clear all files in bucket ${bucket} success`);
503+
} catch (e) {
504+
console.log(`Flush bucket files error: ${e.message}`);
501505
}
502506
}
503507

0 commit comments

Comments
 (0)