@@ -485,15 +485,59 @@ class Cos {
485485 }
486486 }
487487
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+
488528 async upload ( inputs = { } ) {
489- const { bucket } = inputs ;
529+ const { bucket, replace } = inputs ;
490530 const { region } = this ;
491531
492532 if ( ! bucket ) {
493533 throw new TypeError ( `PARAMETER_COS` , 'Bucket name is required' ) ;
494534 }
495535
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 } ` ) ;
497541 if ( inputs . dir && ( await fs . existsSync ( inputs . dir ) ) ) {
498542 const options = { keyPrefix : inputs . keyPrefix } ;
499543
@@ -620,6 +664,7 @@ class Cos {
620664 const dirToUploadPath = inputs . code . src || inputs . code . root ;
621665 const uploadDict = {
622666 bucket : inputs . bucket ,
667+ replace : inputs . replace ,
623668 } ;
624669 if ( fs . lstatSync ( dirToUploadPath ) . isDirectory ( ) ) {
625670 uploadDict . dir = dirToUploadPath ;
@@ -660,6 +705,7 @@ class Cos {
660705 const uploadDict = {
661706 bucket : inputs . bucket ,
662707 keyPrefix : inputs . keyPrefix || '/' ,
708+ replace : inputs . replace ,
663709 } ;
664710
665711 if ( fs . lstatSync ( dirToUploadPath ) . isDirectory ( ) ) {
@@ -675,7 +721,6 @@ class Cos {
675721 async remove ( inputs = { } ) {
676722 console . log ( `Removing bucket from ${ this . region } ` ) ;
677723
678- // 获取全部文件
679724 let detail ;
680725 try {
681726 detail = await this . getBucket ( inputs ) ;
@@ -686,29 +731,13 @@ class Cos {
686731 }
687732 }
688733
734+ // if bucket exist, begain to delate
689735 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- }
711736 try {
737+ // 1. flush all files
738+ await this . flushBucketFiles ( inputs . bucket ) ;
739+
740+ // 2. delete bucket
712741 const deleteBucketHandler = this . promisify (
713742 this . cosClient . deleteBucket . bind ( this . cosClient ) ,
714743 ) ;
@@ -717,6 +746,8 @@ class Cos {
717746 Bucket : inputs . bucket ,
718747 } ) ;
719748 } catch ( e ) {
749+ // why do this judgement again
750+ // because when requesting to delete, bucket may be deleted even though it exist before.
720751 if ( e . code === 'NoSuchBucket' ) {
721752 console . log ( `Bucket ${ inputs . bucket } not exist` ) ;
722753 } else {
0 commit comments