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.
Dateien und Verzeichnisse mit dem Amazon S3 Transfer Manager übertragen
Der Amazon S3 Transfer Manager ist ein Open-Source-Hilfsprogramm zur Dateiübertragung auf hohem Niveau für AWS SDK for Java 2.x. Verwenden Sie es, um Dateien und Verzeichnisse zu und von Amazon Simple Storage Service (Amazon S3) zu übertragen.
Wenn der S3 Transfer Manager auf dem AWS CRT basierten S3-Client oder dem standardmäßigen Java-basierten asynchronen S3-Client mit aktiviertem Multipart aufbaut, kann er Leistungsverbesserungen wie den mehrteiligen Upload und das Abrufen von Bytebereichen nutzen. API
Mit dem S3 Transfer Manager können Sie auch den Fortschritt einer Übertragung in Echtzeit überwachen und die Übertragung für eine spätere Ausführung unterbrechen.
Erste Schritte
Fügen Sie Ihrer Build-Datei Abhängigkeiten hinzu
Um den S3 Transfer Manager mit verbesserter Mehrteile-Leistung zu verwenden, konfigurieren Sie Ihre Build-Datei mit den erforderlichen Abhängigkeiten.
Erstellen Sie eine Instanz des S3 Transfer Managers
Um die parallel Übertragung zu aktivieren, müssen Sie einen AWS CRT basierten S3-Client ODER einen Java-basierten asynchronen S3-Client mit aktiviertem Multipart übergeben. Die folgenden Beispiele zeigen, wie Sie einen S3 Transfer Manager mit benutzerdefinierten Einstellungen konfigurieren.
Laden Sie eine Datei in einen S3-Bucket hoch
Das folgende Beispiel zeigt ein Beispiel für den Datei-Upload zusammen mit der optionalen Verwendung von a LoggingTransferListener
Um eine Datei mit dem S3 Transfer Manager auf Amazon S3 hochzuladen, übergeben Sie ein UploadFileRequest
S3TransferManager
die uploadFile
Das von der uploadFile
Methode zurückgegebene FileUpload
public String uploadFile(S3TransferManager transferManager, String bucketName, String key, URI filePathURI) { UploadFileRequest uploadFileRequest = UploadFileRequest.builder() .putObjectRequest(b -> b.bucket(bucketName).key(key)) .source(Paths.get(filePathURI)) .build(); FileUpload fileUpload = transferManager.uploadFile(uploadFileRequest); CompletedFileUpload uploadResult = fileUpload.completionFuture().join(); return uploadResult.response().eTag(); }
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.transfer.s3.S3TransferManager; import software.amazon.awssdk.transfer.s3.model.CompletedFileUpload; import software.amazon.awssdk.transfer.s3.model.FileUpload; import software.amazon.awssdk.transfer.s3.model.UploadFileRequest; import software.amazon.awssdk.transfer.s3.progress.LoggingTransferListener; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Paths; import java.util.UUID;
Laden Sie eine Datei aus einem S3-Bucket herunter
Das folgende Beispiel zeigt ein Download-Beispiel zusammen mit der optionalen Verwendung von a LoggingTransferListener
Um ein Objekt mit dem S3 Transfer Manager aus einem S3-Bucket herunterzuladen, erstellen Sie ein DownloadFileRequest
Das von der S3TransferManager
downloadFile
Methode zurückgegebene FileDownload
public Long downloadFile(S3TransferManager transferManager, String bucketName, String key, String downloadedFileWithPath) { DownloadFileRequest downloadFileRequest = DownloadFileRequest.builder() .getObjectRequest(b -> b.bucket(bucketName).key(key)) .destination(Paths.get(downloadedFileWithPath)) .build(); FileDownload downloadFile = transferManager.downloadFile(downloadFileRequest); CompletedFileDownload downloadResult = downloadFile.completionFuture().join(); logger.info("Content length [{}]", downloadResult.response().contentLength()); return downloadResult.response().contentLength(); }
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.transfer.s3.S3TransferManager; import software.amazon.awssdk.transfer.s3.model.CompletedFileDownload; import software.amazon.awssdk.transfer.s3.model.DownloadFileRequest; import software.amazon.awssdk.transfer.s3.model.FileDownload; import software.amazon.awssdk.transfer.s3.progress.LoggingTransferListener; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.UUID;
Ein Amazon S3 S3-Objekt in einen anderen Bucket kopieren
Das folgende Beispiel zeigt, wie ein Objekt mit dem S3 Transfer Manager kopiert wird.
Um mit dem Kopieren eines Objekts von einem S3-Bucket in einen anderen Bucket zu beginnen, erstellen Sie eine CopyObjectRequest
Verpacken Sie als Nächstes die Basisdatei CopyObjectRequest
in eine CopyRequest
Das von der S3TransferManager
copy
Methode zurückgegebene Copy
Objekt repräsentiert den Kopiervorgang. Nach Abschluss des Kopiervorgangs enthält das CompletedCopy
public String copyObject(S3TransferManager transferManager, String bucketName, String key, String destinationBucket, String destinationKey) { CopyObjectRequest copyObjectRequest = CopyObjectRequest.builder() .sourceBucket(bucketName) .sourceKey(key) .destinationBucket(destinationBucket) .destinationKey(destinationKey) .build(); CopyRequest copyRequest = CopyRequest.builder() .copyObjectRequest(copyObjectRequest) .build(); Copy copy = transferManager.copy(copyRequest); CompletedCopy completedCopy = copy.completionFuture().join(); return completedCopy.response().copyObjectResult().eTag(); }
Anmerkung
Um eine regionsübergreifende Kopie mit dem S3 Transfer Manager durchzuführen, aktivieren Sie die Option crossRegionAccessEnabled
auf dem AWS CRT S3-Client-Builder, wie im folgenden Codeausschnitt gezeigt.
S3AsyncClient s3AsyncClient = S3AsyncClient.crtBuilder() .crossRegionAccessEnabled(true) .build(); S3TransferManager transferManager = S3TransferManager.builder() .s3Client(s3AsyncClient) .build();
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.services.s3.model.CopyObjectRequest; import software.amazon.awssdk.transfer.s3.S3TransferManager; import software.amazon.awssdk.transfer.s3.model.CompletedCopy; import software.amazon.awssdk.transfer.s3.model.Copy; import software.amazon.awssdk.transfer.s3.model.CopyRequest; import java.util.UUID;
Laden Sie ein lokales Verzeichnis in einen S3-Bucket hoch
Das folgende Beispiel zeigt, wie Sie ein lokales Verzeichnis auf S3 hochladen können.
Rufen Sie zunächst die uploadDirectoryS3TransferManager
Instanz auf und übergeben Sie eine UploadDirectoryRequest
Das DirectoryUploadCompleteDirectoryUpload
Objekt enthält Informationen über die Ergebnisse der Übertragung, einschließlich der Dateien, die nicht übertragen werden konnten.
public Integer uploadDirectory(S3TransferManager transferManager, URI sourceDirectory, String bucketName) { DirectoryUpload directoryUpload = transferManager.uploadDirectory(UploadDirectoryRequest.builder() .source(Paths.get(sourceDirectory)) .bucket(bucketName) .build()); CompletedDirectoryUpload completedDirectoryUpload = directoryUpload.completionFuture().join(); completedDirectoryUpload.failedTransfers() .forEach(fail -> logger.warn("Object [{}] failed to transfer", fail.toString())); return completedDirectoryUpload.failedTransfers().size(); }
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.services.s3.model.ObjectIdentifier; import software.amazon.awssdk.transfer.s3.S3TransferManager; import software.amazon.awssdk.transfer.s3.model.CompletedDirectoryUpload; import software.amazon.awssdk.transfer.s3.model.DirectoryUpload; import software.amazon.awssdk.transfer.s3.model.UploadDirectoryRequest; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Paths; import java.util.UUID;
Laden Sie S3-Bucket-Objekte in ein lokales Verzeichnis herunter
Sie können die Objekte in einem S3-Bucket in ein lokales Verzeichnis herunterladen, wie im folgenden Beispiel gezeigt.
Um die Objekte in einem S3-Bucket in ein lokales Verzeichnis herunterzuladen, rufen Sie zunächst die downloadDirectory
Das DirectoryDownloadCompleteDirectoryDownload
Objekt enthält Informationen über die Ergebnisse der Übertragung, einschließlich der Dateien, die nicht übertragen werden konnten.
public Integer downloadObjectsToDirectory(S3TransferManager transferManager, URI destinationPathURI, String bucketName) { DirectoryDownload directoryDownload = transferManager.downloadDirectory(DownloadDirectoryRequest.builder() .destination(Paths.get(destinationPathURI)) .bucket(bucketName) .build()); CompletedDirectoryDownload completedDirectoryDownload = directoryDownload.completionFuture().join(); completedDirectoryDownload.failedTransfers() .forEach(fail -> logger.warn("Object [{}] failed to transfer", fail.toString())); return completedDirectoryDownload.failedTransfers().size(); }
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.services.s3.model.ObjectIdentifier; import software.amazon.awssdk.transfer.s3.S3TransferManager; import software.amazon.awssdk.transfer.s3.model.CompletedDirectoryDownload; import software.amazon.awssdk.transfer.s3.model.DirectoryDownload; import software.amazon.awssdk.transfer.s3.model.DownloadDirectoryRequest; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashSet; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors;
Vollständige Beispiele anzeigen
GitHub enthält den vollständigen