AWS S3 s Javom

1. Uvod

U ovom uputstvu naučit ćemo kako programski komunicirati sa sustavom za pohranu Amazon S3 (Simple Storage Service) s Jave.

Imajte na umu da S3 ima vrlo jednostavnu strukturu - svaka grupa može pohraniti neograničen broj objekata kojima se može pristupiti putem SOAP sučelja ili API-ja u REST stilu.

Ubuduće ćemo koristiti AWS SDK za Javu za izradu, popis i brisanje segmenata S3. Također ćemo prenijeti, popisati, preuzeti, kopirati, premjestiti, preimenovati i izbrisati objekte u tim segmentima.

2. Ovisnosti Mavena

Prije nego što započnemo, u našem projektu moramo proglasiti ovisnost o AWS SDK:

 com.amazonaws aws-java-sdk 1.11.163 

Da biste pogledali najnoviju verziju, provjerite Maven Central.

3. Preduvjeti

Da bismo koristili AWS SDK, trebat će nam nekoliko stvari:

  1. AWS račun: trebamo račun Amazon Web Services. Ako još uvijek nemate nijedan, nastavite i otvorite račun
  2. AWS sigurnosne vjerodajnice: To su naši pristupni ključevi koji nam omogućuju programsko pozivanje AWS API radnji. Ove vjerodajnice možemo dobiti na dva načina, bilo korištenjem vjerodajnica root računa AWS iz odjeljka pristupnih ključeva na stranici Sigurnosne vjerodajnice ili korištenjem IAM vjerodajnica s IAM konzole
  3. Odabir AWS regije: Moramo odabrati AWS regiju (e) u koju želimo pohraniti naše Amazon S3 podatke. Imajte na umu da se cijene pohrane S3 razlikuju ovisno o regiji. Za više pojedinosti prijeđite na službenu dokumentaciju. Za ovaj ćemo vodič koristiti US East (Ohio) (regija nas-istok-2)

4. Stvaranje veze s klijentom

Prvo, moramo stvoriti klijentsku vezu za pristup web usluzi Amazon S3. Koristit ćemo AmazonS3 sučelje za ovu svrhu:

Vjerodajnice za AWSCredentials = novi BasicAWSCredentials ("", ""); 

A zatim konfigurirajte klijenta:

AmazonS3 s3client = AmazonS3ClientBuilder .standard () .withCredentials (novi AWSStaticCredentialsProvider (vjerodajnice)) .withRegion (Regions.US_EAST_2) .build ();

5. Radovi s kantama Amazon S3

5.1. Stvaranje kante

Važno je napomenuti da prostor imena segmenta dijele svi korisnici sustava. Dakle, naše ime segmenta mora biti jedinstveno za sva postojeća imena segmenata u Amazonu S3 (saznat ćemo kako to provjeriti za samo trenutak).

Štoviše, kako je navedeno u službenoj dokumentaciji, nazivi segmenata moraju biti u skladu sa sljedećim zahtjevima:

  • imena ne smiju sadržavati donje crte
  • imena bi trebala imati između 3 i 63 znaka
  • imena ne bi trebala završavati crticom
  • imena ne mogu sadržavati susjedna razdoblja
  • imena ne mogu sadržavati crtice pored točaka (npr. "my-.bucket.com" i "my.-bucket" nisu valjane)
  • imena ne mogu sadržavati velika slova

Stvorimo segment:

Niz bucketName = "baeldung-kanta"; if (s3client.doesBucketExist (Ime kante)) {LOG.info ("Naziv segmenta nije dostupan." + "Pokušajte ponovo s drugim nazivom segmenta."); povratak; } s3client.createBucket (ime kante);

Evo, koristimo s3client koje smo stvorili u prethodnom koraku. Prije stvaranja segmenta provjeravamo je li naziv našeg segmenta dostupan ili ne pomoću doesBucketExist () metoda. Ako je ovo ime dostupno, tada ćemo koristiti createBucket () metoda.

5.2. Kante s popisima

Sada, kad smo stvorili nekoliko segmenata, ispisamo sada popis svih segmenata dostupnih u našem S3 okruženju pomoću listBuckets () metoda. Ova metoda vratit će popis svih segmenata:

Popis segmenata = s3client.listBuckets (); za (kanta segmenta: segmenti) {System.out.println (bucket.getName ()); }

Ovdje će se navesti sva područja koja su prisutna u našem S3 okruženju:

baeldung-kanta baeldung-kanta-test2 elasticbeanstalk-us-istok-2

5.3. Brisanje segmenta

Važno je osigurati da je naša kanta prazna prije nego što je možemo izbrisati. U suprotnom će se izuzeti. Također imajte na umu da je samo vlasnik segmenta može izbrisati bez obzira na njegova dopuštenja (Pravila kontrole pristupa):

pokušajte {s3client.deleteBucket ("baeldung-bucket-test2"); } catch (AmazonServiceException e) {System.err.println ("e.getErrorMessage ()); return;}

6. Amazon S3 objektne operacije

Datoteka ili zbirka podataka unutar segmenta Amazon S3 poznata je kao objekt. Možemo izvesti nekoliko operacija na objektima poput prijenosa, popisa, preuzimanja, kopiranja, premještanja, preimenovanja i brisanja.

6.1. Učitavanje objekata

Prijenos objekta prilično je jednostavan postupak. Koristit ćemo a putObject () metoda koja prihvaća tri parametra:

  1. kantaName: Naziv segmenta u koji želimo prenijeti objekt
  2. ključ: Ovo je puni put do datoteke
  3. datoteka: Stvarna datoteka koja sadrži podatke za prijenos
s3client.putObject (ime kante, "Document / hello.txt", nova datoteka ("/ Users / user / Document / hello.txt"));

6.2. Popis objekata

Koristit ćemo listObjects () metoda za popis svih dostupnih objekata u našem S3 segmentu:

ObjectListing objectListing = s3client.listObjects (ime kante); za (S3ObjectSummary os: objectListing.getObjectSummaries ()) {LOG.info (os.getKey ()); }

Pozivanje listObjects () metoda s3client objekt će dati Lista objekata objekt, koji se može koristiti za dobivanje popisa svih sažetaka objekata u navedenom segmentu. Ovdje samo ispisujemo ključ, ali na raspolaganju je i nekoliko drugih opcija, poput veličine, vlasnika, zadnje izmjene, klase pohrane itd.

Ovo će sada ispisati popis svih objekata u našoj grupi:

Document / hello.txt

6.3. Preuzimanje objekta

Da bismo preuzeli objekt, prvo ćemo upotrijebiti getObject () metoda na s3client koji će vratiti an S3Objekt objekt. Kad ovo dobijemo, nazvat ćemo getObjectContent () na ovome da biste dobili S3ObjectInputStream objekt koji se ponaša kao konvencionalna Java InputStream.

S3Object s3object = s3client.getObject (ime kante, "slika / slika.png"); S3ObjectInputStream inputStream = s3object.getObjectContent (); FileUtils.copyInputStreamToFile (inputStream, nova datoteka ("/ Users / user / Desktop / hello.txt"));

Evo, koristimo FileUtils.copyInputStreamToFile () metoda Apache Commons. Također možete posjetiti ovaj članak o Baeldungu da biste istražili druge načine pretvorbe InputStream do a Datoteka.

6.4. Kopiranje, preimenovanje i premještanje objekta

Objekt možemo kopirati pozivom copyObject () metoda na našem s3client koji prihvaća četiri parametra:

  1. naziv izvornog segmenta
  2. ključ objekta u izvornom segmentu
  3. naziv odredišnog segmenta (može biti isto kao izvor)
  4. ključ objekta u odredišnom segmentu
s3client.copyObject ("baeldung-bucket", "picture / pic.png", "baeldung-bucket2", "document / picture.png");

Napomena: Možemo koristiti kombinaciju copyObject () metoda deleteObject () za obavljanje zadataka premještanja i preimenovanja. To će uključivati ​​prvo kopiranje objekta, a zatim brisanje sa starog mjesta.

6.5. Brisanje objekta

Da bismo izbrisali objekt, nazvat ćemo ga deleteObject () metoda na s3client i proslijedite ime segmenta i ključ objekta:

s3client.deleteObject ("baeldung-bucket", "picture / pic.png");

6.6. Brisanje više objekata

Da bismo odjednom izbrisali više objekata, prvo ćemo stvoriti DeleteObjectsRequest objekt i proslijedite ime segmenta njegovom konstruktoru. Tada ćemo proslijediti niz svih tipki objekta koje želimo izbrisati.

Jednom kad imamo ovo DeleteObjectsRequest objekt, možemo ga proslijediti deleteObjects () metoda našeg s3client kao argument. Ako uspije, tada će se izbrisati svi predmeti koje smo dostavili:

Niz objkeyArr [] = {"document / hello.txt", "document / pic.png"}; DeleteObjectsRequest delObjReq = novo DeleteObjectsRequest ("baeldung-bucket") .withKeys (objkeyArr); s3client.deleteObjects (delObjReq);

7. Zaključak

U ovom smo se članku usredotočili na osnove interakcije s web uslugom Amazon S3 - i na razini segmenta i na objektu.

Kao i uvijek, cjelovitu implementaciju ovog vodiča možete pronaći na Githubu.


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