Többrészes feltöltések az Amazon S3-ban Java-val

1. Áttekintés

Ebben az oktatóanyagban megtudhatjuk, hogyan kell kezelni az Amazon S3 többrészes feltöltéseit az AWS Java SDK segítségével.

Egyszerűen fogalmazva, egy többrészes feltöltés során a tartalmat kisebb részekre bontjuk, és mindegyik részt külön-külön feltöltjük. Minden alkatrész átállítása megtörtént.

A többrészes feltöltések a következő előnyöket kínálják:

  • Nagyobb teljesítmény - párhuzamosan tölthetünk fel alkatrészeket
  • Könnyebb hibajavítás - csak a meghibásodott részeket kell feltöltenünk
  • Szüneteltesse és folytassa a feltöltéseket - az alkatrészeket bármikor feltölthetjük. Az egész folyamat szünetelhet, és a fennmaradó részeket később feltöltheti

Vegye figyelembe, hogy többrészes feltöltés esetén Az Amazon S3 alkalmazással az utolsó rész kivételével minden alkatrésznek legalább 5 MB méretűnek kell lennie.

2. Maven-függőségek

Mielőtt elkezdenénk, hozzá kell adnunk az AWS SDK-függőséget a projektünkhöz:

 com.amazonaws aws-java-sdk 1.11.290 

A legújabb verzió megtekintéséhez keresse fel a Maven Central oldalt.

3. Többrészes feltöltés végrehajtása

3.1. Amazon S3 kliens létrehozása

Először is meg kell hozzon létre egy klienst az Amazon S3 eléréséhez. Használjuk a AmazonS3ClientBuilder erre a célra:

AmazonS3 amazonS3 = AmazonS3ClientBuilder .standard () .withCredentials (új DefaultAWSCredentialsProviderChain ()) .withRegion (Regions.DEFAULT_REGION) .build ();

Ez létrehoz egy klienst, amely az alapértelmezett hitelesítő-szolgáltatói láncot használja az AWS-hitelesítő adatok eléréséhez.

Az alapértelmezett hitelesítő-szolgáltatói lánc működéséről további információkat a dokumentációban talál. Ha az alapértelmezettől eltérő régiót használ (USA West-2), mindenképpen cserélje ki Régiók.DEFAULT_REGION azzal az egyedi régióval.

3.2. TransferManager létrehozása a feltöltések kezeléséhez

Majd használjuk TransferManagerBuilder létrehozni a TransferManager példa.

Ez az osztály egyszerű API-kat biztosít a feltöltések és letöltések kezeléséhez az Amazon S3 segítségével és kezeli az összes kapcsolódó feladatot:

TransferManager tm = TransferManagerBuilder.standard () .withS3Client (amazonS3) .WithMultipartUploadThreshold ((long) (5 * 1024 * 1025)) .build ();

A többrészes feltöltési küszöb megadja a méretet bájtokban, amely felett a feltöltést többrészes feltöltésként kell végrehajtani.

Az Amazon S3 minimális alkatrészméretet 5 MB (az utolsó alkatrésztől eltérő alkatrészek esetében) előír, ezért 5 MB-ot használtunk többrészes feltöltési küszöbként.

3.3. Objektum feltöltése

Objektum feltöltése a TransferManager egyszerűen hívnunk kell feltöltés () funkció. Ez párhuzamosan tölti fel az alkatrészeket:

String bucketName = "baeldung-bucket"; String keyName = "my-picture.jpg"; Karakterláncfájl = új Fájl ("documents / my-picture.jpg"); Feltöltés feltöltése = tm.upload (bucketName, keyName, fájl);

TransferManager.upload () visszatér egy Feltöltés tárgy. Ez felhasználható a feltöltések állapotának ellenőrzésére és kezelésére. A következő részben megtesszük.

3.4. Várakozás a feltöltés befejezésére

TransferManager.upload () egy nem blokkoló funkció; azonnal visszatér, amíg a feltöltés a háttérben fut.

Tudunk használja a visszaküldöttet Feltöltés objektum várja a feltöltés befejezését mielőtt kilépne a programból:

próbáld ki a {upload.waitForCompletion (); } catch (AmazonClientException e) {// ...}

3.5. A feltöltési folyamat nyomon követése

A feltöltés előrehaladásának követése meglehetősen általános követelmény; megtehetjük a segítségével ProgressListener példa:

ProgressListener progressListener = progressEvent -> System.out.println ("Átadott bájtok:" + progressEvent.getBytesTransferred ()); PutObjectRequest kérés = new PutObjectRequest (bucketName, keyName, fájl); request.setGeneralProgressListener (progressListener); Upload upload = tm.upload (kérés);

A ProgressListener az általunk létrehozott fájlok egyszerűen tovább nyomtatják az átvitt bájtok számát, amíg a feltöltés befejeződik.

3.6. A feltöltési párhuzamosság ellenőrzése

Alapértelmezés szerint, TransferManager maximum tíz szálat használ a többrészes feltöltésekhez.

Ezt azonban egy an megadásával ellenőrizhetjük ExecutorService építés közben TransferManager:

int maxUploadThreads = 5; TransferManager tm = TransferManagerBuilder.standard () .withS3Client (amazonS3) .withMultipartUploadThreshold ((hosszú) (5 * 1024 * 1025)) .withExecutorFactory (() -> Executors.newFixedThreadPool) (maxUploadThreads); maxUploadThreads

Itt egy lambda-t használtunk a wrapper megvalósításának létrehozásához ExecutorFactory és átadta withExecutorFactory () funkció.

4. Következtetés

Ebben a rövid cikkben megtanultuk, hogyan kell többrészes feltöltéseket végrehajtani az AWS SDK for Java használatával, és láttuk, hogyan lehet irányítani a feltöltés egyes aspektusait, és nyomon követni annak előrehaladását.

Mint mindig, a cikk teljes kódja elérhető a GitHubon.