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.