Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Trasferisci file e directory con Amazon S3 Transfer Manager
Amazon S3 Transfer Manager è un'utilità di trasferimento di file open source di alto livello per. AWS SDK for Java 2.x Usalo per trasferire file e directory da e verso Amazon Simple Storage Service (Amazon S3).
Se basato sul client S3 AWS basato su CRT o sul client asincrono S3standard basato su Java con multipart abilitato, S3 Transfer Manager può sfruttare i miglioramenti delle prestazioni come l'API di caricamento multiparte e il recupero di intervalli di byte.
Con S3 Transfer Manager, puoi anche monitorare l'avanzamento di un trasferimento in tempo reale e mettere in pausa il trasferimento per un'esecuzione successiva.
Inizia a usare
Aggiungi dipendenze al tuo file di build
Per utilizzare S3 Transfer Manager con prestazioni multiparte migliorate, configura il file di build con le dipendenze necessarie.
Crea un'istanza di S3 Transfer Manager
Per abilitare il trasferimento parallelo, è necessario passare un client S3 AWS basato su CRT OPPURE un client asincrono S3 basato su Java con multipart abilitato. Gli esempi seguenti mostrano come configurare un S3 Transfer Manager con impostazioni personalizzate.
Carica un file in un bucket S3
L'esempio seguente mostra un esempio di caricamento di file insieme all'uso opzionale di a LoggingTransferListener
Per caricare un file su Amazon S3 utilizzando S3 Transfer Manager, passa un UploadFileRequest
S3TransferManager
metodo uploadFile.
L'FileUploaduploadFile
metodo rappresenta il processo di caricamento. Al termine della richiesta, l'CompletedFileUpload
public void trackUploadFile(S3TransferManager transferManager, String bucketName, String key, URI filePathURI) { UploadFileRequest uploadFileRequest = UploadFileRequest.builder() .putObjectRequest(b -> b.bucket(bucketName).key(key)) .addTransferListener(LoggingTransferListener.create()) // Add listener. .source(Paths.get(filePathURI)) .build(); FileUpload fileUpload = transferManager.uploadFile(uploadFileRequest); fileUpload.completionFuture().join(); /* The SDK provides a LoggingTransferListener implementation of the TransferListener interface. You can also implement the interface to provide your own logic. Configure log4J2 with settings such as the following. <Configuration status="WARN"> <Appenders> <Console name="AlignedConsoleAppender" target="SYSTEM_OUT"> <PatternLayout pattern="%m%n"/> </Console> </Appenders> <Loggers> <logger name="software.amazon.awssdk.transfer.s3.progress.LoggingTransferListener" level="INFO" additivity="false"> <AppenderRef ref="AlignedConsoleAppender"/> </logger> </Loggers> </Configuration> Log4J2 logs the progress. The following is example output for a 21.3 MB file upload. Transfer initiated... | | 0.0% |==== | 21.1% |============ | 60.5% |====================| 100.0% Transfer complete! */ }
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;
Scarica un file da un bucket S3
L'esempio seguente mostra un esempio di download insieme all'uso opzionale di a LoggingTransferListener
Per scaricare un oggetto da un bucket S3 utilizzando S3 Transfer Manager, crea un DownloadFileRequest
L'FileDownloaddownloadFile
metodo S3TransferManager
's rappresenta il trasferimento del file. Una volta completato il download, CompletedFileDownload
public void trackDownloadFile(S3TransferManager transferManager, String bucketName, String key, String downloadedFileWithPath) { DownloadFileRequest downloadFileRequest = DownloadFileRequest.builder() .getObjectRequest(b -> b.bucket(bucketName).key(key)) .addTransferListener(LoggingTransferListener.create()) // Add listener. .destination(Paths.get(downloadedFileWithPath)) .build(); FileDownload downloadFile = transferManager.downloadFile(downloadFileRequest); CompletedFileDownload downloadResult = downloadFile.completionFuture().join(); /* The SDK provides a LoggingTransferListener implementation of the TransferListener interface. You can also implement the interface to provide your own logic. Configure log4J2 with settings such as the following. <Configuration status="WARN"> <Appenders> <Console name="AlignedConsoleAppender" target="SYSTEM_OUT"> <PatternLayout pattern="%m%n"/> </Console> </Appenders> <Loggers> <logger name="software.amazon.awssdk.transfer.s3.progress.LoggingTransferListener" level="INFO" additivity="false"> <AppenderRef ref="AlignedConsoleAppender"/> </logger> </Loggers> </Configuration> Log4J2 logs the progress. The following is example output for a 21.3 MB file download. Transfer initiated... |======= | 39.4% |=============== | 78.8% |====================| 100.0% Transfer complete! */ }
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;
Copiare un oggetto Amazon S3 in un altro bucket
L'esempio seguente mostra come copiare un oggetto con S3 Transfer Manager.
Per iniziare la copia di un oggetto da un bucket S3 a un altro bucket, crea un'istanza di base. CopyObjectRequest
Successivamente, racchiudi il file di base CopyObjectRequest
in un file CopyRequest
L'Copy
oggetto restituito dal copy
metodo S3TransferManager
's rappresenta il processo di copia. Una volta completato il processo di copia, l'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(); }
Nota
Per eseguire una copia su più regioni con S3 Transfer Manager, abilitalo sul generatore di client S3 AWS basato crossRegionAccessEnabled
su CRT, come mostrato nel frammento seguente.
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;
Carica una directory locale in un bucket S3
L'esempio seguente mostra come caricare una directory locale su S3.
Inizia chiamando il metodo uploadDirectoryS3TransferManager
istanza, passando un. UploadDirectoryRequest
L'DirectoryUploadCompleteDirectoryUpload
oggetto contiene informazioni sui risultati del trasferimento, inclusi i file non riusciti a trasferire.
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;
Scarica gli oggetti del bucket S3 in una directory locale
Puoi scaricare gli oggetti in un bucket S3 in una directory locale come mostrato nell'esempio seguente.
Per scaricare gli oggetti in un bucket S3 in una directory locale, iniziate chiamando il metodo DownloadDirectory
L'DirectoryDownloadCompleteDirectoryDownload
oggetto contiene informazioni sui risultati del trasferimento, inclusi i file non riusciti a trasferire.
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;
Vedi esempi completi
GitHub contiene il codice completo