La AWS SDK for Java versione 1.x è entrata in modalità manutenzione il 31 luglio 2024 e sarà disponibile il 31 end-of-support
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à.
Utilizzo di TransferManager perAmazon S3Operazioni
Puoi utilizzare il pluginAWS SDK for Java TransferManager classe per trasferire in modo affidabile i file dall'ambiente locale aAmazon S3e per copiare oggetti da una posizione S3 a un'altra.TransferManager
può ottenere lo stato di avanzamento di un trasferimento e mettere in pausa o riprendere caricamenti e download.
Nota
Best practice
Ti consigliamo di abilitare la regola del ciclo di vita AbortIncompleteMultipartUpload sui bucket Amazon S3.
Questa regola indica a Amazon S3 di interrompere l'esecuzione di caricamenti in più parti che non sono stati completati entro un determinato numero di giorni dopo l'avvio. Quando questo limite di tempo impostato viene superato, Amazon S3 interrompe il caricamento ed elimina i dati di caricamento incompleti.
Per ulteriori informazioni, consultaConfigurazione del ciclo di vita per un bucket con funzione Versioni multiplenellaAmazon S3Guida per l'utente di .
Nota
Questi esempi di codice presuppongono che tu comprenda il materiale inUtilizzo diAWS SDK for Javae hanno configurato il valore predefinitoAWScredenziali che utilizzano le informazioni inConfigurazioneAWSCredenziali e regione per lo sviluppo.
Caricamento di file e directory
TransferManager può caricare file, elenchi di file e directory su qualsiasiAmazon S3secchi che haicreato in precedenza.
Caricamento di un file singolo
Chiama TransferManagerupload
metodo, fornendo unAmazon S3nome bucket, nome chiave (oggetto) e Java standardFile
Importazioni
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;
Codice
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();
Laupload
restituisce il metodoimmediatamente, fornendo unUpload
oggetto da utilizzare per verificare lo stato di trasferimento o per attenderne il completamento.
Consulta .Attendi il completamento di un trasferimentoper informazioni sull'uso diwaitForCompletion
per completare con successo un trasferimento prima di chiamare TransferManagershutdownNow
metodo. In attesa del completamento del trasferimento, è possibile effettuare il sondaggio o ascoltare aggiornamenti sullo stato e sui progressi. Consulta .Ottieni stato di trasferimento e avanzamentoper ulteriori informazioni.
Vedi l'esempio completo
Carica un elenco di file
Per caricare più file in un'unica operazione, chiama TransferManageruploadFileList
metodo, fornendo quanto segue:
-
Un recordAmazon S3nome bucket
-
UNprefisso della chiaveper anticipare i nomi degli oggetti creati (il percorso all'interno del bucket in cui posizionare gli oggetti)
-
UNFile
oggetto che rappresenta la directory relativa da cui creare percorsi file
Importazioni
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;
Codice
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();
Consulta .Attendi il completamento di un trasferimentoper informazioni sull'uso diwaitForCompletion
per completare con successo un trasferimento prima di chiamare TransferManagershutdownNow
metodo. In attesa del completamento del trasferimento, è possibile effettuare il sondaggio o ascoltare aggiornamenti sullo stato e sui progressi. Consulta .Ottieni stato di trasferimento e avanzamentoper ulteriori informazioni.
LaMultipleFileUploadoggetto restituito dauploadFileList
può essere utilizzato per interrogare lo stato di trasferimento o lo stato di avanzamento. Consulta .Sondaggio dell'attuale avanzamento di un trasferimentoeOttieni l'avanzamento del trasferimento con un ProgressListenerper ulteriori informazioni.
È possibile utilizzare ancheMultipleFileUpload
'sgetSubTransfers
metodo per ottenere l'individuoUpload
oggetti per ogni file trasferito. Per ulteriori informazioni, consultaOttieni lo stato di avanzamento dei subtrasferimenti.
Vedi l'esempio completo
Caricamento di una directory
Puoi utilizzare TransferManageruploadDirectory
metodo per caricare un'intera directory di file, con la possibilità di copiare i file nelle sottodirectory in modo ricorsivo. Fornisci unAmazon S3nome del bucket, key prefix S3, aFileboolean
valore che indica se si desidera copiare le sottodirectory in modo ricorsivo (veroofalso).
Importazioni
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;
Codice
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();
Consulta .Attendi il completamento di un trasferimentoper informazioni sull'uso diwaitForCompletion
per completare con successo un trasferimento prima di chiamare TransferManagershutdownNow
metodo. In attesa del completamento del trasferimento, è possibile effettuare il sondaggio o ascoltare aggiornamenti sullo stato e sui progressi. Consulta .Ottieni stato di trasferimento e avanzamentoper ulteriori informazioni.
LaMultipleFileUploadoggetto restituito dauploadFileList
può essere utilizzato per interrogare lo stato di trasferimento o lo stato di avanzamento. Consulta .Sondaggio dell'attuale avanzamento di un trasferimentoeOttieni l'avanzamento del trasferimento con un ProgressListenerper ulteriori informazioni.
È possibile utilizzare ancheMultipleFileUpload
'sgetSubTransfers
metodo per ottenere l'individuoUpload
oggetti per ogni file trasferito. Per ulteriori informazioni, consultaOttieni lo stato di avanzamento dei subtrasferimenti.
Vedi l'esempio completo
Download di file o directory
Utilizzo dell' TransferManager classe per scaricare un singolo file (Amazon S3object) o una directory (unAmazon S3nome del bucket (seguito da un prefisso oggetto) daAmazon S3.
Download di un file singolo
Usa il TransferManagerdownload
metodo, fornendo ilAmazon S3nome bucket contenente l'oggetto che si desidera scaricare, il nome della chiave (oggetto) e unFile
Importazioni
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;
Codice
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();
Consulta .Attendi il completamento di un trasferimentoper informazioni sull'uso diwaitForCompletion
per completare con successo un trasferimento prima di chiamare TransferManagershutdownNow
metodo. In attesa del completamento del trasferimento, è possibile effettuare il sondaggio o ascoltare aggiornamenti sullo stato e sui progressi. Consulta .Ottieni stato di trasferimento e avanzamentoper ulteriori informazioni.
Vedi l'esempio completo
Scarica una directory
Per scaricare un set di file che condividono un key prefix comune (analogo a una directory su un file system) daAmazon S3, usa TransferManagerdownloadDirectory
metodo. Il metodo accetta ilAmazon S3nome bucket contenente gli oggetti che si desidera scaricare, il prefisso dell'oggetto condiviso da tutti gli oggetti eFile
Importazioni
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;
Codice
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();
Consulta .Attendi il completamento di un trasferimentoper informazioni sull'uso diwaitForCompletion
per completare con successo un trasferimento prima di chiamare TransferManagershutdownNow
metodo. In attesa del completamento del trasferimento, è possibile effettuare il sondaggio o ascoltare aggiornamenti sullo stato e sui progressi. Consulta .Ottieni stato di trasferimento e avanzamentoper ulteriori informazioni.
Vedi l'esempio completo
Copia oggetti
Per copiare un oggetto da un bucket S3 in un altro, utilizzare TransferManagercopy
metodo.
Importazioni
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;
Codice
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();
Vedi l'esempio completo
Attendi il completamento di un trasferimento
Se l'applicazione (o il thread) può bloccarsi fino al completamento del trasferimento, è possibile utilizzare iltrasferimentointerfacciawaitForCompletion
metodo per bloccare fino al completamento del trasferimento o si verifica un'eccezione.
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); }
Si ottengono progressi nei trasferimenti se effettui un sondaggio per eventiprimavocazionewaitForCompletion
, implementare un meccanismo di polling su un thread separato o ricevere gli aggiornamenti dello stato di avanzamento in modo asincrono utilizzando unProgressListener.
Vedi l'esempio completo
Ottieni stato di trasferimento e avanzamento
Ciascuna delle classi restituite dal TransferManagerupload*
,download*
, ecopy
methods restituisce un'istanza di una delle seguenti classi, a seconda che si tratti di un'operazione a file singolo o a più file.
Classe | Restituiti da |
---|---|
|
|
|
|
|
|
|
|
|
Tutte queste classi implementano iltrasferimentointerfaccia.Transfer
fornisce metodi utili per ottenere l'avanzamento di un trasferimento, sospendere o riprendere il trasferimento e ottenere lo stato corrente o finale del trasferimento.
Argomenti
Sondaggio dell'attuale avanzamento di un trasferimento
Questo ciclo stampa lo stato di avanzamento di un trasferimento, ne esamina il progresso corrente durante l'esecuzione e, una volta completato, ne stampa lo stato finale.
Importazioni
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;
Codice
// 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);
Vedi l'esempio completo
Ottieni l'avanzamento del trasferimento con un ProgressListener
È possibile collegare unProgressListenera qualsiasi trasferimento utilizzando iltrasferimentointerfacciaaddProgressListener
metodo.
UNProgressListenerrichiede un solo metodo,progressChanged
, che richiede unProgressEventoggetto. È possibile utilizzare l'oggetto per ottenere i byte totali dell'operazione chiamandonegetBytes
metodo e il numero di byte trasferiti finora chiamandogetBytesTransferred
.
Importazioni
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;
Codice
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();
Vedi l'esempio completo
Ottieni lo stato di avanzamento dei subtrasferimenti
LaMultipleFileUploadclass può restituire informazioni sui suoi subtrasferimenti chiamandoligetSubTransfers
metodo. Restituisce un elemento non modificabileRaccolta
Importazioni
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;
Codice
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);
Vedi l'esempio completo
Ulteriori informazioni
-
Chiavi degli oggettinellaAmazon Simple Storage ServiceGuida per l’utente di