package Ġcom . nim bus framework . nim bus aws . clients . file Ċ Ċ import Ġcom . amazonaws . services . s 3 . Amazon S 3 Ċ import Ġcom . amazonaws . services . s 3 . Amazon S 3 Client Builder Ċ import Ġcom . amazonaws . services . s 3 . model . Object Metadata Ċ import Ġcom . amazonaws . services . s 3 . model . Put Object Request Ċ import Ġcom . google . inject . Inject Ċ import Ġcom . nim bus framework . nim bus core . clients . file . File Information Ċ import Ġcom . nim bus framework . nim bus core . clients . file . File Storage Client Ċ import Ġjava . io . File Ċ import Ġjava . io . InputStream Ċ Ċ internal Ġclass ĠFile Storage Client S 3 ( annotation Bucket Name : ĠString , Ġstage : ĠString ): ĠFile Storage Client Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbucket Name Ġ= Ġ( annotation Bucket Name Ġ+ Ġstage ). toLowerCase () ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġs 3 Client : ĠAmazon S 3 ĊĊĠĠĠ Ġoverride Ġfun Ġsave File ( path : ĠString , ĠinputStream : ĠInputStream ) Ġ{ ĊĠĠĠĠĠĠĠ Ġs 3 Client . put Object ( bucketName , Ġpath , ĠinputStream , ĠObject Metadata ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave File With ContentType ( path : ĠString , Ġcontent : ĠString , ĠcontentType : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobject Metadata Ġ= ĠObject Metadata () ĊĠĠĠĠĠĠĠ Ġobject Metadata . contentType Ġ= ĠcontentType ĊĠĠĠĠĠĠĠ Ġval Ġput Object Request Ġ= ĠPut Object Request ( bucketName , Ġpath , Ġcontent . byte InputStream (), Ġobject Metadata ) ĊĊĠĠĠĠĠĠĠ Ġs 3 Client . put Object ( put Object Request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave File With ContentType ( path : ĠString , Ġfile : ĠFile , ĠcontentType : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobject Metadata Ġ= ĠObject Metadata () ĊĠĠĠĠĠĠĠ Ġobject Metadata . contentType Ġ= ĠcontentType ĊĠĠĠĠĠĠĠ Ġval Ġput Object Request Ġ= ĠPut Object Request ( bucketName , Ġpath , Ġfile . inputStream (), Ġobject Metadata ) ĊĊĠĠĠĠĠĠĠ Ġs 3 Client . put Object ( put Object Request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave File With ContentType ( path : ĠString , ĠinputStream : ĠInputStream , ĠcontentType : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobject Metadata Ġ= ĠObject Metadata () ĊĠĠĠĠĠĠĠ Ġobject Metadata . contentType Ġ= ĠcontentType ĊĠĠĠĠĠĠĠ Ġval Ġput Object Request Ġ= ĠPut Object Request ( bucketName , Ġpath , ĠinputStream , Ġobject Metadata ) ĊĊĠĠĠĠĠĠĠ Ġs 3 Client . put Object ( put Object Request ) ĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠgetFile ( path : ĠString ): ĠInputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġs 3 Client . getObject ( bucketName , Ġpath ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . object Content ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlist Files (): ĠList < File Information > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Ġ= Ġs 3 Client . list Objects ( bucketName ) ĊĠĠĠĠĠĠĠ Ġval Ġkey List Ġ= Ġcurrent . object Sum maries ĊĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġs 3 Client . list Next Batch Of Objects ( current ) ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( current . is Truncated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey List . addAll ( current . object Sum maries ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġs 3 Client . list Next Batch Of Objects ( current ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġkey List . addAll ( current . object Sum maries ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġkey List . map Ġ{ Ġs 3 Object Summary Ġ-> ĠFile Information ( s 3 Object Summary . lastModified , Ġs 3 Object Summary . size , Ġs 3 Object Summary . key ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave File ( path : ĠString , Ġfile : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġs 3 Client . put Object ( bucketName , Ġpath , Ġfile ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave File ( path : ĠString , Ġcontent : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġs 3 Client . put Object ( bucketName , Ġpath , Ġcontent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete File ( path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġs 3 Client . delete Object ( bucketName , Ġpath ) ĊĠĠĠ Ġ} Ċ }