benutzen TransferManager zumAmazon S3Operationen - AWS SDK for Java 1.x

Version AWS SDK for Java 1.x wurde am 31. Juli 2024 in den Wartungsmodus versetzt und wird end-of-supportam 31. Dezember 2025 verfügbar sein. Wir empfehlen Ihnen, auf den zu migrieren AWS SDK for Java 2.x, um weiterhin neue Funktionen, Verfügbarkeitsverbesserungen und Sicherheitsupdates zu erhalten.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

benutzen TransferManager zumAmazon S3Operationen

Mit der AWS SDK for Java TransferManager -Klasse können Sie zuverlässig Dateien aus der lokalen Umgebung an Amazon S3 übertragen und Objekte von einem S3-Speicherort an einen anderen kopieren. TransferManager kann den Fortschritt einer Übertragung abfragen sowie Uploads und Downloads pausieren und fortsetzen.

Anmerkung

Bewährte Methode

Wir empfehlen, dass Sie die Lebenszyklus-Regel AbortIncompleteMultipartUpload für Ihre Amazon S3-Buckets aktivieren.

Diese Regel weist Amazon S3 an, mehrteilige Uploads abzubrechen, die nicht innerhalb einer bestimmten Anzahl von Tagen nach dem Start abgeschlossen werden. Wenn die festgelegte Höchstdauer überschritten wird, bricht Amazon S3 den Upload ab und löscht dann die unvollständigen Upload-Daten.

Weitere Informationen finden Sie unterLebenszykluskonfiguration für einen Bucket mit VersioningimAmazon S3-Benutzerhandbuch.

Anmerkung

Diese Codebeispiele gehen davon aus, dass Sie das Material inVerwendung derAWS SDK for Javaund haben default konfiguriertAWSAnmeldeinformationen, die die Informationen in verwendenEinrichtenAWSAnmeldeinformationen und Entwicklungsregionaus.

Hochladen von Dateien und Verzeichnissen

TransferManager kann Dateien, Dateilisten und Verzeichnisse auf beliebige hochladenAmazon S3Eimer, die du hastZuvor erstelltaus.

Hochladen einer einzelnen Datei

Rufen Sie TransferManager'suploadMethode zur Verfügung stellenAmazon S3-Bucket-Name, ein Schlüssel-Objekt-) Name und ein Standard-JavaDatei-Objekt, das die hochzuladende Datei darstellt.

Importe

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.transfer.MultipleFileUpload; import com.amazonaws.services.s3.transfer.TransferManager; import com.amazonaws.services.s3.transfer.TransferManagerBuilder; import com.amazonaws.services.s3.transfer.Upload; import java.io.File; import java.util.ArrayList; import java.util.Arrays;

Code

File f = new File(file_path); TransferManager xfer_mgr = TransferManagerBuilder.standard().build(); try { Upload xfer = xfer_mgr.upload(bucket_name, key_name, f); // loop with Transfer.isDone() XferMgrProgress.showTransferProgress(xfer); // or block with Transfer.waitForCompletion() XferMgrProgress.waitForCompletion(xfer); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } xfer_mgr.shutdownNow();

Die upload-Methode kehrt sofort zurück und stellt ein Upload-Objekt bereit, mit dem Sie den Übertragungsstatus abrufen oder auf die Fertigstellung warten können.

Siehe .Warten auf die Fertigstellung einer ÜbertragungWeitere Informationen zur Verwendung vonwaitForCompletionum eine Übertragung erfolgreich abzuschließen, bevor Sie TransferManager's aufrufenshutdownNow-Methode. Während Sie darauf warten, dass die Übertragung abgeschlossen ist, können Sie Aktualisierungen zum Status und Fortschritt abfragen oder diese als Ereignisse empfangen. Weitere Informationen finden Sie unter Abrufen des Übertragungsstatus und ‑fortschritts.

Auf GitHub finden Sie ein vollständiges Beispiel.

Hochladen einer Dateiliste

Rufen Sie den TransferManager auf, um mehrere Dateien auf einmal hochzuladen.uploadFileList-Methode mit folgendem:

  • Name eines Amazon S3-Buckets

  • Schlüsselpräfix, das dem Namen der erstellten Objekte vorangestellt wird (Pfad innerhalb des Buckets, wo die Objekte abgespeichert werden sollen)

  • File-Objekt, das das relative Verzeichnis darstellt, von dem aus die Dateipfade erstellt werden sollen

  • List-Objekt mit einer Reihe von File-Objekten zum Hochladen

Importe

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.transfer.MultipleFileUpload; import com.amazonaws.services.s3.transfer.TransferManager; import com.amazonaws.services.s3.transfer.TransferManagerBuilder; import com.amazonaws.services.s3.transfer.Upload; import java.io.File; import java.util.ArrayList; import java.util.Arrays;

Code

ArrayList<File> files = new ArrayList<File>(); for (String path : file_paths) { files.add(new File(path)); } TransferManager xfer_mgr = TransferManagerBuilder.standard().build(); try { MultipleFileUpload xfer = xfer_mgr.uploadFileList(bucket_name, key_prefix, new File("."), files); // loop with Transfer.isDone() XferMgrProgress.showTransferProgress(xfer); // or block with Transfer.waitForCompletion() XferMgrProgress.waitForCompletion(xfer); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } xfer_mgr.shutdownNow();

Siehe .Warten auf die Fertigstellung einer ÜbertragungWeitere Informationen zur Verwendung vonwaitForCompletionum eine Übertragung erfolgreich abzuschließen, bevor Sie TransferManager's aufrufenshutdownNow-Methode. Während Sie darauf warten, dass die Übertragung abgeschlossen ist, können Sie Aktualisierungen zum Status und Fortschritt abfragen oder diese als Ereignisse empfangen. Weitere Informationen finden Sie unter Abrufen des Übertragungsstatus und ‑fortschritts.

DieMultipleFileUploadObjekt zurückgegeben vonuploadFileListKann zur Abfrage des Übertragungsstatus oder —fortschritts verwendet werden. Weitere Informationen finden Sie unter Abfrage des aktuellen Fortschritts einer Übertragung und Abruf des Übertragungsfortschritts mit einem ProgressListener.

Sie können auch die MultipleFileUpload-Methode der getSubTransfers-Klasse verwenden, um die einzelnen Upload-Objekte für jede zu übertragende Datei zu erhalten. Weitere Informationen finden Sie unter Abruf des Fortschritts von untergeordneten Übertragungen.

Auf GitHub finden Sie ein vollständiges Beispiel.

Upload eines Verzeichnisses

Sie können TransferManager's verwendenuploadDirectory-Methode zum Hochladen eines gesamten Dateiverzeichnisses mit der Option, Dateien in Unterverzeichnissen rekursiv zu kopieren. Sie stellen einen Amazon S3-Bucket-Namen, ein S3-Schlüsselpräfix, ein File-Objekt, das das lokale zu kopierende Verzeichnis darstellt, sowie einen boolean-Wert bereit, der angibt, ob Sie Unterverzeichnisse rekursiv kopieren möchten (true oder false).

Importe

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.transfer.MultipleFileUpload; import com.amazonaws.services.s3.transfer.TransferManager; import com.amazonaws.services.s3.transfer.TransferManagerBuilder; import com.amazonaws.services.s3.transfer.Upload; import java.io.File; import java.util.ArrayList; import java.util.Arrays;

Code

TransferManager xfer_mgr = TransferManagerBuilder.standard().build(); try { MultipleFileUpload xfer = xfer_mgr.uploadDirectory(bucket_name, key_prefix, new File(dir_path), recursive); // loop with Transfer.isDone() XferMgrProgress.showTransferProgress(xfer); // or block with Transfer.waitForCompletion() XferMgrProgress.waitForCompletion(xfer); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } xfer_mgr.shutdownNow();

Siehe .Warten auf die Fertigstellung einer ÜbertragungWeitere Informationen zur Verwendung vonwaitForCompletionum eine Übertragung erfolgreich abzuschließen, bevor Sie TransferManager's aufrufenshutdownNow-Methode. Während Sie darauf warten, dass die Übertragung abgeschlossen ist, können Sie Aktualisierungen zum Status und Fortschritt abfragen oder diese als Ereignisse empfangen. Weitere Informationen finden Sie unter Abrufen des Übertragungsstatus und ‑fortschritts.

DieMultipleFileUploadObjekt zurückgegeben vonuploadFileListKann zur Abfrage des Übertragungsstatus oder —fortschritts verwendet werden. Weitere Informationen finden Sie unter Abfrage des aktuellen Fortschritts einer Übertragung und Abruf des Übertragungsfortschritts mit einem ProgressListener.

Sie können auch die MultipleFileUpload-Methode der getSubTransfers-Klasse verwenden, um die einzelnen Upload-Objekte für jede zu übertragende Datei zu erhalten. Weitere Informationen finden Sie unter Abruf des Fortschritts von untergeordneten Übertragungen.

Auf GitHub finden Sie ein vollständiges Beispiel.

Herunterladen von Dateien oder Verzeichnissen

Verwenden der TransferManager klasse, um entweder eine einzelne Datei herunterzuladen (Amazon S3object) oder ein Verzeichnis (einAmazon S3Bucket-Name gefolgt von einem Objektpräfix) vonAmazon S3aus.

Herunterladen einer einzelnen Datei

Verwenden Sie die TransferManager'sdownload-Methode zur Verfügung stelltAmazon S3-Bucket-Name mit dem herunterzuladenden Objekt, den Schlüssel⸺- (Objekt-) Namen sowie einenDatei-Objekt, das die auf dem lokalen System zu erstellende Datei darstellt.

Importe

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.transfer.Download; import com.amazonaws.services.s3.transfer.MultipleFileDownload; import com.amazonaws.services.s3.transfer.TransferManager; import com.amazonaws.services.s3.transfer.TransferManagerBuilder; import java.io.File;

Code

File f = new File(file_path); TransferManager xfer_mgr = TransferManagerBuilder.standard().build(); try { Download xfer = xfer_mgr.download(bucket_name, key_name, f); // loop with Transfer.isDone() XferMgrProgress.showTransferProgress(xfer); // or block with Transfer.waitForCompletion() XferMgrProgress.waitForCompletion(xfer); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } xfer_mgr.shutdownNow();

Siehe .Warten auf die Fertigstellung einer ÜbertragungWeitere Informationen zur Verwendung vonwaitForCompletionum eine Übertragung erfolgreich abzuschließen, bevor Sie TransferManager's aufrufenshutdownNow-Methode. Während Sie darauf warten, dass die Übertragung abgeschlossen ist, können Sie Aktualisierungen zum Status und Fortschritt abfragen oder diese als Ereignisse empfangen. Weitere Informationen finden Sie unter Abrufen des Übertragungsstatus und ‑fortschritts.

Auf GitHub finden Sie ein vollständiges Beispiel.

Herunterladen eines Verzeichnisses

So laden Sie eine Reihe von Dateien mit gemeinsamem key prefix (analog zu einem Verzeichnis eines Dateisystems) von herunterAmazon S3verwenden Sie den TransferManagerdownloadDirectory-Methode. Die Methode nimmt den Amazon S3-Bucket-Namen entgegen, der die herunterzuladenden Objekte enthält, das gemeinsame Objektpräfix aller Objekte sowie ein File-Objekt, das das Verzeichnis darstellt, in das die Dateien auf dem lokalen System heruntergeladen werden sollen. Wenn das angegebene Verzeichnis noch nicht vorhanden ist, wird es erstellt.

Importe

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.transfer.Download; import com.amazonaws.services.s3.transfer.MultipleFileDownload; import com.amazonaws.services.s3.transfer.TransferManager; import com.amazonaws.services.s3.transfer.TransferManagerBuilder; import java.io.File;

Code

TransferManager xfer_mgr = TransferManagerBuilder.standard().build(); try { MultipleFileDownload xfer = xfer_mgr.downloadDirectory( bucket_name, key_prefix, new File(dir_path)); // loop with Transfer.isDone() XferMgrProgress.showTransferProgress(xfer); // or block with Transfer.waitForCompletion() XferMgrProgress.waitForCompletion(xfer); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } xfer_mgr.shutdownNow();

Siehe .Warten auf die Fertigstellung einer ÜbertragungWeitere Informationen zur Verwendung vonwaitForCompletionum eine Übertragung erfolgreich abzuschließen, bevor Sie TransferManager's aufrufenshutdownNow-Methode. Während Sie darauf warten, dass die Übertragung abgeschlossen ist, können Sie Aktualisierungen zum Status und Fortschritt abfragen oder diese als Ereignisse empfangen. Weitere Informationen finden Sie unter Abrufen des Übertragungsstatus und ‑fortschritts.

Auf GitHub finden Sie ein vollständiges Beispiel.

Kopieren von Objekten

Sie können ein Objekt von einem S3-Bucket in einen anderen kopieren, indem Sie den TransferManager verwenden Sie den TransferManagercopy-Methode.

Importe

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.transfer.Copy; import com.amazonaws.services.s3.transfer.TransferManager; import com.amazonaws.services.s3.transfer.TransferManagerBuilder;

Code

System.out.println("Copying s3 object: " + from_key); System.out.println(" from bucket: " + from_bucket); System.out.println(" to s3 object: " + to_key); System.out.println(" in bucket: " + to_bucket); TransferManager xfer_mgr = TransferManagerBuilder.standard().build(); try { Copy xfer = xfer_mgr.copy(from_bucket, from_key, to_bucket, to_key); // loop with Transfer.isDone() XferMgrProgress.showTransferProgress(xfer); // or block with Transfer.waitForCompletion() XferMgrProgress.waitForCompletion(xfer); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } xfer_mgr.shutdownNow();

Auf GitHub finden Sie ein vollständiges Beispiel.

Warten auf die Fertigstellung einer Übertragung

Wenn Ihre Anwendung (oder Ihr Thread) blockieren kann, bis die Übertragung abgeschlossen ist, können Sie dieÜbertragung-SchnittstellewaitForCompletion-Methode zu blockieren, bis die Übertragung abgeschlossen ist oder eine Ausnahme auftritt.

try { xfer.waitForCompletion(); } catch (AmazonServiceException e) { System.err.println("Amazon service error: " + e.getMessage()); System.exit(1); } catch (AmazonClientException e) { System.err.println("Amazon client error: " + e.getMessage()); System.exit(1); } catch (InterruptedException e) { System.err.println("Transfer interrupted: " + e.getMessage()); System.exit(1); }

Sie können den Fortschritt von Übertragungen abrufen, indem Sie Ereignisse abfragen, bevor Sie waitForCompletion aufrufen, indem Sie einen Abfragemechanismus in einem separaten Thread implementieren oder Fortschrittsaktualisierungen asynchron mit einem ProgressListener empfangen.

Auf GitHub finden Sie ein vollständiges Beispiel.

Abrufen des Übertragungsstatus und ‑fortschritt

Jede der vom TransferManager zurückgegebenen Klassenupload*,download*, undcopy-Methoden gibt eine Instance der folgenden Klassen zurück, je nachdem, ob es sich um eine Einzel- oder Mehrdateienoperation handelt.

Klasse Zurückgegeben von

Copy

copy

Download

download

MultipleFileDownload

downloadDirectory

Hochladen

upload

MultipleFileUpload

uploadFileList, uploadDirectory

Alle diese Klassen implementieren die Transfer-Schnittstelle. Transfer liefert nützliche Methoden, um den Fortschritt einer Übertragung abzurufen, die Übertragung zu pausieren oder fortzusetzen sowie den aktuellen oder abschließenden Status der Übertragung abzurufen.

Abfragen des aktuellen Fortschritts einer Übertragung

Diese Schleife gibt den Fortschritt einer Übertragung aus, untersucht den aktuellen Fortschritt während der Ausführung und gibt beim Abschluss den abschließenden Status aus.

Importe

import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; import com.amazonaws.event.ProgressEvent; import com.amazonaws.event.ProgressListener; import com.amazonaws.services.s3.transfer.*; import com.amazonaws.services.s3.transfer.Transfer.TransferState; import java.io.File; import java.util.ArrayList; import java.util.Collection;

Code

// print the transfer's human-readable description System.out.println(xfer.getDescription()); // print an empty progress bar... printProgressBar(0.0); // update the progress bar while the xfer is ongoing. do { try { Thread.sleep(100); } catch (InterruptedException e) { return; } // Note: so_far and total aren't used, they're just for // documentation purposes. TransferProgress progress = xfer.getProgress(); long so_far = progress.getBytesTransferred(); long total = progress.getTotalBytesToTransfer(); double pct = progress.getPercentTransferred(); eraseProgressBar(); printProgressBar(pct); } while (xfer.isDone() == false); // print the final state of the transfer. TransferState xfer_state = xfer.getState(); System.out.println(": " + xfer_state);

Auf GitHub finden Sie ein vollständiges Beispiel.

Abruf des Übertragungsfortschritts mit einem ProgressListener

Sie können eineProgressListenerzu jedem Transfer unter Verwendung desÜbertragung-SchnittstelleaddProgressListener-Methode.

Ein ProgressListener erfordert nur eine Methode, nämlich progressChanged. Diese nimmt ein ProgressEvent-Objekt entgegen. Mit diesem Objekt können Sie die Gesamtzahl der Bytes der Operation ermitteln, indem Sie die getBytes-Methode aufrufen. Die Gesamtzahl der übertragenen Bytes erfahren Sie mit Aufruf von getBytesTransferred.

Importe

import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; import com.amazonaws.event.ProgressEvent; import com.amazonaws.event.ProgressListener; import com.amazonaws.services.s3.transfer.*; import com.amazonaws.services.s3.transfer.Transfer.TransferState; import java.io.File; import java.util.ArrayList; import java.util.Collection;

Code

File f = new File(file_path); TransferManager xfer_mgr = TransferManagerBuilder.standard().build(); try { Upload u = xfer_mgr.upload(bucket_name, key_name, f); // print an empty progress bar... printProgressBar(0.0); u.addProgressListener(new ProgressListener() { public void progressChanged(ProgressEvent e) { double pct = e.getBytesTransferred() * 100.0 / e.getBytes(); eraseProgressBar(); printProgressBar(pct); } }); // block with Transfer.waitForCompletion() XferMgrProgress.waitForCompletion(u); // print the final state of the transfer. TransferState xfer_state = u.getState(); System.out.println(": " + xfer_state); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } xfer_mgr.shutdownNow();

Auf GitHub finden Sie ein vollständiges Beispiel.

Abruf des Fortschritts von untergeordneten Übertragungen

Die MultipleFileUpload-Klasse kann Informationen über untergeordnete Übertragungen zurückgeben, wenn die getSubTransfers-Methode aufgerufen wird. Sie gibt zurück, was nicht modifizierbar istSammlungvonHochladen-Objekte, die den jeweiligen Übertragungsstatus und —fortschritt jeder untergeordneten Übertragung angeben.

Importe

import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; import com.amazonaws.event.ProgressEvent; import com.amazonaws.event.ProgressListener; import com.amazonaws.services.s3.transfer.*; import com.amazonaws.services.s3.transfer.Transfer.TransferState; import java.io.File; import java.util.ArrayList; import java.util.Collection;

Code

Collection<? extends Upload> sub_xfers = new ArrayList<Upload>(); sub_xfers = multi_upload.getSubTransfers(); do { System.out.println("\nSubtransfer progress:\n"); for (Upload u : sub_xfers) { System.out.println(" " + u.getDescription()); if (u.isDone()) { TransferState xfer_state = u.getState(); System.out.println(" " + xfer_state); } else { TransferProgress progress = u.getProgress(); double pct = progress.getPercentTransferred(); printProgressBar(pct); System.out.println(); } } // wait a bit before the next update. try { Thread.sleep(200); } catch (InterruptedException e) { return; } } while (multi_upload.isDone() == false); // print the final state of the transfer. TransferState xfer_state = multi_upload.getState(); System.out.println("\nMultipleFileUpload " + xfer_state);

Auf GitHub finden Sie ein vollständiges Beispiel.

Weitere Infos