Version AWS SDK for Java 1.x wurde am 31. Juli 2024 in den Wartungsmodus versetzt und wird end-of-support
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'supload
Methode zur Verfügung stellenAmazon S3-Bucket-Name, ein Schlüssel-Objekt-) Name und ein Standard-JavaDatei
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 vonwaitForCompletion
um 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
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 vonwaitForCompletion
um 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 vonuploadFileList
Kann 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 Fileboolean
-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 vonwaitForCompletion
um 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 vonuploadFileList
Kann 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
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 vonwaitForCompletion
um 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
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 vonwaitForCompletion
um 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 |
---|---|
|
|
|
|
|
|
|
|
|
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.
Themen
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 istSammlung
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
-
ObjektschlüsselimAmazon Simple Storage Service-Benutzerhandbuch