package Ġcom . api . project . repository . file Ċ Ċ import Ġcom . amazonaws . services . s 3 . Amazon S 3 Ċ import Ġcom . amazonaws . services . s 3 . model . Object Metadata Ċ import Ġcom . amazonaws . services . s 3 . model . Put Object Request Ċ import Ġcom . amazonaws . util . IO Utils Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . beans . factory . annotation . Value Ċ import Ġorg . springframework . boot . context . event . Application Ready Event Ċ import Ġorg . springframework . context . event . EventListener Ċ import Ġorg . springframework . stereotype . Component ĊĊ Ċ @ Component Ċ class ĠFile S 3 Ġ: ĠFile Repository Ġ{ ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġaws Client : ĠAmazon S 3 ĊĊĠĠĠ Ġ@ Value ("\ ${ s 3 . bucket . name }") ĊĠĠĠ Ġval Ġs 3 Bucket Name : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( java Class ) ĊĊĠĠĠ Ġ@ EventListener ( Application Ready Event :: class ) ĊĠĠĠ Ġfun Ġauto Create Bucket () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( aws Client . does Bucket Exist V 2 ( s 3 Bucket Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info ((" S 3 ĠBucket Ġ\"$ s 3 Bucket Name \" Ġalready Ġexists .")) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info ((" S 3 ĠBucket Ġ\"$ s 3 Bucket Name \" Ġdoes Ġnot Ġexist . ĠCreating Ġbucket Ġ... ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaws Client . create Bucket ( s 3 Bucket Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Document ( document Id : ĠString , Ġdocument : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= ĠObject Metadata () ĊĠĠĠĠĠĠĠ Ġmetadata . content Length Ġ= Ġdocument . size . to Long () ĊĠĠĠĠĠĠĠ Ġaws Client . put Object ( Put Object Request ( s 3 Bucket Name , Ġdocument Id , Ġdocument . inputStream (), Ġmetadata )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġget Documents ( ids : ĠCollection < String >): ĠMap < String , ĠByteArray > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobjects Map Ġ= Ġmutable Map Of < String , ĠByteArray >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( id Ġin Ġids ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetObject ( id )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobjects Map [ id ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġobjects Map ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetObject ( id : ĠString ): ĠByteArray ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Fetching Ġobject Ġid Ġ\"$ id \" Ġfrom ĠS 3 ĠBucket ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs 3 Object Ġ= Ġaws Client . getObject ( s 3 Bucket Name , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIO Utils . toByteArray ( s 3 Object . object Content ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" Exception Ġoccured Ġwhile Ġfetching Ġobject Ġid Ġ\"$ id \" Ġfrom ĠS 3 ĠBucket ", Ġex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Document ( id : ĠString ): ĠByteArray ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetObject ( id ) ĊĠĠĠ Ġ} ĊĊ Ċ }