@@ -485,15 +485,59 @@ class Cos {
485
485
}
486
486
}
487
487
488
+ async flushBucketFiles ( bucket ) {
489
+ console . log ( `Start to clear all files in bucket ${ bucket } ` ) ;
490
+ let detail ;
491
+ try {
492
+ detail = await this . getBucket ( {
493
+ bucket,
494
+ } ) ;
495
+ } catch ( e ) {
496
+ if ( e . code === 'NoSuchBucket' ) {
497
+ console . log ( `Bucket ${ bucket } not exist` ) ;
498
+ return ;
499
+ }
500
+ }
501
+
502
+ if ( detail ) {
503
+ if ( detail . Contents && detail . Contents . length > 0 ) {
504
+ // delete files
505
+ const objectList = ( detail . Contents || [ ] ) . map ( ( item ) => {
506
+ return {
507
+ Key : item . Key ,
508
+ } ;
509
+ } ) ;
510
+
511
+ try {
512
+ const deleteMultipleObjectHandler = this . promisify (
513
+ this . cosClient . deleteMultipleObject . bind ( this . cosClient ) ,
514
+ ) ;
515
+ await deleteMultipleObjectHandler ( {
516
+ Region : this . region ,
517
+ Bucket : bucket ,
518
+ Objects : objectList ,
519
+ } ) ;
520
+ console . log ( `Clear all files in bucket ${ bucket } success` ) ;
521
+ } catch ( e ) {
522
+ console . log ( e ) ;
523
+ }
524
+ }
525
+ }
526
+ }
527
+
488
528
async upload ( inputs = { } ) {
489
- const { bucket } = inputs ;
529
+ const { bucket, replace } = inputs ;
490
530
const { region } = this ;
491
531
492
532
if ( ! bucket ) {
493
533
throw new TypeError ( `PARAMETER_COS` , 'Bucket name is required' ) ;
494
534
}
495
535
496
- console . log ( `Uploding files to ${ this . region } 's bucket: ${ inputs . bucket } ` ) ;
536
+ if ( replace ) {
537
+ await this . flushBucketFiles ( bucket ) ;
538
+ }
539
+
540
+ console . log ( `Uploding files to bucket: ${ bucket } , region: ${ this . region } ` ) ;
497
541
if ( inputs . dir && ( await fs . existsSync ( inputs . dir ) ) ) {
498
542
const options = { keyPrefix : inputs . keyPrefix } ;
499
543
@@ -620,6 +664,7 @@ class Cos {
620
664
const dirToUploadPath = inputs . code . src || inputs . code . root ;
621
665
const uploadDict = {
622
666
bucket : inputs . bucket ,
667
+ replace : inputs . replace ,
623
668
} ;
624
669
if ( fs . lstatSync ( dirToUploadPath ) . isDirectory ( ) ) {
625
670
uploadDict . dir = dirToUploadPath ;
@@ -660,6 +705,7 @@ class Cos {
660
705
const uploadDict = {
661
706
bucket : inputs . bucket ,
662
707
keyPrefix : inputs . keyPrefix || '/' ,
708
+ replace : inputs . replace ,
663
709
} ;
664
710
665
711
if ( fs . lstatSync ( dirToUploadPath ) . isDirectory ( ) ) {
@@ -675,7 +721,6 @@ class Cos {
675
721
async remove ( inputs = { } ) {
676
722
console . log ( `Removing bucket from ${ this . region } ` ) ;
677
723
678
- // 获取全部文件
679
724
let detail ;
680
725
try {
681
726
detail = await this . getBucket ( inputs ) ;
@@ -686,29 +731,13 @@ class Cos {
686
731
}
687
732
}
688
733
734
+ // if bucket exist, begain to delate
689
735
if ( detail ) {
690
- if ( detail . Contents && detail . Contents . length > 0 ) {
691
- // delete files
692
- const objectList = ( detail . Contents || [ ] ) . map ( ( item ) => {
693
- return {
694
- Key : item . Key ,
695
- } ;
696
- } ) ;
697
-
698
- try {
699
- const deleteMultipleObjectHandler = this . promisify (
700
- this . cosClient . deleteMultipleObject . bind ( this . cosClient ) ,
701
- ) ;
702
- await deleteMultipleObjectHandler ( {
703
- Region : this . region ,
704
- Bucket : inputs . bucket ,
705
- Objects : objectList ,
706
- } ) ;
707
- } catch ( e ) {
708
- console . log ( e ) ;
709
- }
710
- }
711
736
try {
737
+ // 1. flush all files
738
+ await this . flushBucketFiles ( inputs . bucket ) ;
739
+
740
+ // 2. delete bucket
712
741
const deleteBucketHandler = this . promisify (
713
742
this . cosClient . deleteBucket . bind ( this . cosClient ) ,
714
743
) ;
@@ -717,6 +746,8 @@ class Cos {
717
746
Bucket : inputs . bucket ,
718
747
} ) ;
719
748
} catch ( e ) {
749
+ // why do this judgement again
750
+ // because when requesting to delete, bucket may be deleted even though it exist before.
720
751
if ( e . code === 'NoSuchBucket' ) {
721
752
console . log ( `Bucket ${ inputs . bucket } not exist` ) ;
722
753
} else {
0 commit comments