AWS S3 s programom Java

1. Úvod

V tomto tutoriále sa dozvieme, ako programovo interagovať s úložným systémom Amazon S3 (Simple Storage Service) z prostredia Java.

Pamätajte, že S3 má veľmi jednoduchú štruktúru - do každého segmentu je možné uložiť ľubovoľný počet objektov, ku ktorým je možné pristupovať pomocou rozhrania SOAP alebo rozhrania API v štýle REST.

Odteraz budeme na vytváranie, zoznam a odstraňovanie segmentov S3 používať AWS SDK pre Javu. Budeme tiež nahrávať, zoznamovať, sťahovať, kopírovať, presúvať, premenovávať a mazať objekty v týchto segmentoch.

2. Maven závislosti

Než začneme, musíme v našom projekte deklarovať závislosť AWS SDK:

 com.amazonaws aws-java-sdk 1.11.163 

Ak chcete zobraziť najnovšiu verziu, začiarknite políčko Maven Central.

3. Predpoklady

Aby sme mohli používať AWS SDK, budeme potrebovať niekoľko vecí:

  1. Účet AWS: potrebujeme účet Amazon Web Services. Ak stále žiadny nemáte, vytvorte si účet
  2. Poverenia zabezpečenia AWS: Toto sú naše prístupové kľúče, ktoré nám umožňujú uskutočňovať programové volania na akcie AWS API. Tieto poverenia môžeme získať dvoma spôsobmi, a to buď pomocou poverení koreňového účtu AWS zo sekcie prístupových kľúčov na stránke Zabezpečovacie poverenia, alebo pomocou poverení používateľa IAM z konzoly IAM.
  3. Výber oblasti AWS: Musíme zvoliť oblasť (-y) AWS, do ktorej chceme uložiť naše údaje Amazon S3. Majte na pamäti, že ceny úložiska S3 sa líšia podľa regiónu. Ďalšie informácie nájdete v oficiálnej dokumentácii. V tomto výučbe použijeme východ USA (Ohio) (región us-východ-2)

4. Vytvorenie pripojenia klienta

Najskôr musíme vytvoriť klientske pripojenie na prístup k webovej službe Amazon S3. Použijeme AmazonS3 rozhranie na tento účel:

AWSCredentials credentials = new BasicAWSCredentials ("", ""); 

A potom nakonfigurujte klienta:

AmazonS3 s3client = AmazonS3ClientBuilder .standard () .withCredentials (nové AWSStaticCredentialsProvider (poverenia)). SRegion (Regions.US_EAST_2) .build ();

5. Operácie s lopatami Amazon S3

5.1. Vytvorenie vedra

Je dôležité poznamenať, že priestor názvov segmentu zdieľajú všetci používatelia systému. Názov nášho segmentu musí byť preto jedinečný pre všetky existujúce názvy segmentov v službe Amazon S3 (zistíme, ako to skontrolovať za chvíľu).

Ako je uvedené v oficiálnej dokumentácii, názvy segmentov musia navyše vyhovovať nasledujúcim požiadavkám:

  • názvy by nemali obsahovať podčiarkovníky
  • mená by mali mať medzi 3 a 63 znakmi
  • mená by nemali končiť pomlčkou
  • mená nemôžu obsahovať susediace bodky
  • názvy nemôžu obsahovať pomlčky vedľa bodiek (napr. „my-.bucket.com“ a „my.-bucket“ sú neplatné)
  • mená nemôžu obsahovať veľké písmená

Vytvorme vedro:

Reťazec bucketName = "baeldung-bucket"; if (s3client.doesBucketExist (bucketName)) {LOG.info ("Názov segmentu nie je k dispozícii." + "Skúste to znova s ​​iným názvom segmentu."); návrat; } s3client.createBucket (bucketName);

Tu používame s3client ktoré sme vytvorili v predchádzajúcom kroku. Pred vytvorením segmentu skontrolujeme, či je názov nášho segmentu k dispozícii alebo nie doesBucketExist () metóda. Ak je tento názov k dispozícii, použijeme createBucket () metóda.

5.2. Zoznamy lopaty

Teraz, keď sme vytvorili niekoľko segmentov, si teraz vytlačíme zoznam všetkých segmentov dostupných v našom prostredí S3 pomocou listBuckets () metóda. Táto metóda vráti zoznam všetkých segmentov:

Zoznam segmentov = s3client.listBuckets (); pre (Bucket bucket: buckets) {System.out.println (bucket.getName ()); }

Toto bude zoznam všetkých segmentov, ktoré sú prítomné v našom prostredí S3:

baeldung-bucket baeldung-bucket-test2 elasticbeanstalk-us-východ-2

5.3. Vymazanie segmentu

Je dôležité zabezpečiť, aby bol náš segment prázdny skôr, ako ho budeme môcť vymazať. V opačnom prípade bude vyvolaná výnimka. Upozorňujeme tiež, že iba vlastník segmentu ho môže odstrániť bez ohľadu na jeho povolenia (pravidlá kontroly prístupu):

try {s3client.deleteBucket ("baeldung-bucket-test2"); } catch (AmazonServiceException e) {System.err.println ("e.getErrorMessage ()); návrat;}

6. Operácie s objektom Amazon S3

Súbor alebo zbierka údajov vo vnútri bloku Amazon S3 sa nazýva objekt. S objektmi môžeme vykonať niekoľko operácií, ako je nahrávanie, vypisovanie, sťahovanie, kopírovanie, presúvanie, premenovanie a mazanie.

6.1. Načítavajú sa objekty

Nahranie objektu je celkom jednoduchý proces. Použijeme a putObject () metóda, ktorá akceptuje tri parametre:

  1. bucketName: Názov segmentu, kam chceme nahrať objekt
  2. kľúč: Toto je úplná cesta k súboru
  3. spis: Skutočný súbor obsahujúci údaje, ktoré sa majú nahrať
s3client.putObject (bucketName, "Dokument / hello.txt", nový súbor ("/ Používatelia / používateľ / Dokument / hello.txt"));

6.2. Výpis objektov

Použijeme listObjects () metóda na zoznam všetkých dostupných objektov v našom segmente S3:

ObjectListing objectListing = s3client.listObjects (bucketName); pre (S3ObjectSummary os: objectListing.getObjectSummaries ()) {LOG.info (os.getKey ()); }

Telefonovanie listObjects () metóda s3client objekt prinesie Zoznam objektov objekt, ktorý možno použiť na získanie zoznamu všetkých súhrnov objektov v určenom segmente. Práve tu tlačíme kľúč, ale je k dispozícii aj niekoľko ďalších možností, ako je veľkosť, vlastník, posledná zmena, trieda úložiska atď ...

Týmto sa vytlačí zoznam všetkých objektov v našom segmente:

Dokument / ahoj.txt

6.3. Sťahovanie objektu

Na stiahnutie objektu najskôr použijeme getObject () metóda na s3client ktorý vráti S3Object objekt. Keď to dostaneme, zavoláme getObjectContent () na tomto získať S3ObjectInputStream objekt, ktorý sa chová ako konvenčná Java InputStream.

S3Object s3object = s3client.getObject (bucketName, "picture / pic.png"); S3ObjectInputStream inputStream = s3object.getObjectContent (); FileUtils.copyInputStreamToFile (inputStream, nový súbor ("/ Users / user / Desktop / hello.txt"));

Tu používame FileUtils.copyInputStreamToFile () metóda od Apache Commons. Môžete tiež navštíviť tento článok o Baeldungu a preskúmať ďalšie spôsoby prevodu InputStream do a Súbor.

6.4. Kopírovanie, premenovanie a presunutie objektu

Objekt môžeme skopírovať volaním copyObject () metóda na našom s3client ktorý akceptuje štyri parametre:

  1. názov skupiny zdrojov
  2. kľúč objektu v zdrojovom segmente
  3. názov cieľového segmentu (môže byť rovnaký ako zdroj)
  4. kľúč objektu v cieľovom segmente
s3client.copyObject ("baeldung-bucket", "picture / pic.png", "baeldung-bucket2", "document / picture.png");

Poznámka: Môžeme použiť kombináciu copyObject () metóda deleteObject () na vykonávanie presunu a premenovania úloh. Bude to spočiatku kopírovať objekt a potom ho vymazať zo starého miesta.

6.5. Vymazanie objektu

Ak chcete vymazať objekt, zavoláme deleteObject () metóda na s3client a odovzdať názov segmentu a kľúč objektu:

s3client.deleteObject ("baeldung-bucket", "obrázok / pic.png");

6.6. Odstraňovanie viacerých objektov

Ak chcete vymazať viac objektov naraz, najskôr vytvoríme DeleteObjectsRequest objekt a odovzdať názov vedra jeho konštruktoru. Potom odovzdáme pole všetkých kľúčov objektov, ktoré chceme vymazať.

Keď to raz máme DeleteObjectsRequest objekt, môžeme to odovzdať deleteObjects () metóda našej s3client ako argument. Ak bude úspešný, odstránia sa všetky objekty, ktoré sme zadali:

Reťazec objkeyArr [] = {"document / hello.txt", "document / pic.png"}; DeleteObjectsRequest delObjReq = nový DeleteObjectsRequest ("baeldung-bucket") .withKeys (objkeyArr); s3client.deleteObjects (delObjReq);

7. Záver

V tomto článku sme sa zamerali na základy interakcie s webovou službou Amazon S3 - na úrovni segmentov aj na úrovni objektov.

Úplnú implementáciu tohto tutoriálu nájdete ako vždy na serveri Github.


$config[zx-auto] not found$config[zx-overlay] not found