Suivi d'un téléchargement en plusieurs parties à l'aide du AWS SDKs - Amazon Simple Storage Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Suivi d'un téléchargement en plusieurs parties à l'aide du AWS SDKs

Vous pouvez suivre la progression du chargement d’un objet vers Amazon S3 à l’aide d’une interface d’écoute. L’API de chargement partitionné de haut niveau fournit une interface d’écoute appelée ProgressListener. Les événements de progression ont lieu de manière périodique et informent l’écouteur que des octets ont été transférés. Pour en savoir plus sur le chargement partitionné, consultez Chargement et copie d’objets à l’aide du chargement partitionné dans Amazon S3.

Pour une end-to-end procédure de téléchargement d'un objet avec un téléchargement en plusieurs parties avec une somme de contrôle supplémentaire, voir. Didacticiel : chargement partitionné d’un objet et vérification de l’intégrité de ses données

La section suivante explique comment suivre un téléchargement partitionné avec le AWS SDKs.

Java
Exemple

L’exemple de code Java suivant charge un fichier et utilise le ExecutionInterceptor pour suivre la progression du chargement. Pour obtenir des instructions sur la création et le test d'un échantillon de travail, consultez Getting Started dans le guide du développeur AWS SDK pour Java 2.x.

import java.nio.file.Paths; import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider; import software.amazon.awssdk.core.async.AsyncRequestBody; import software.amazon.awssdk.core.interceptor.Context; import software.amazon.awssdk.core.interceptor.ExecutionAttributes; import software.amazon.awssdk.core.interceptor.ExecutionInterceptor; import software.amazon.awssdk.services.s3.S3AsyncClient; import software.amazon.awssdk.services.s3.model.PutObjectRequest; public class TrackMPUProgressUsingHighLevelAPI { static class ProgressListener implements ExecutionInterceptor { private long transferredBytes = 0; @Override public void beforeTransmission(Context.BeforeTransmission context, ExecutionAttributes executionAttributes) { if (context.httpRequest().firstMatchingHeader("Content-Length").isPresent()) { String contentLength = context.httpRequest().firstMatchingHeader("Content-Length").get(); long partSize = Long.parseLong(contentLength); transferredBytes += partSize; System.out.println("Transferred bytes: " + transferredBytes); } } } public static void main(String[] args) throws Exception { String existingBucketName = "*** Provide bucket name ***"; String keyName = "*** Provide object key ***"; String filePath = "*** file to upload ***"; S3AsyncClient s3Client = S3AsyncClient.builder() .credentialsProvider(ProfileCredentialsProvider.create()) .overrideConfiguration(c -> c.addExecutionInterceptor(new ProgressListener())) .build(); // For more advanced uploads, you can create a request object // and supply additional request parameters (ex: progress listeners, // canned ACLs, etc.) PutObjectRequest request = PutObjectRequest.builder() .bucket(existingBucketName) .key(keyName) .build(); AsyncRequestBody requestBody = AsyncRequestBody.fromFile(Paths.get(filePath)); // You can ask the upload for its progress, or you can // add a ProgressListener to your request to receive notifications // when bytes are transferred. // S3AsyncClient processes all transfers asynchronously, // so this call will return immediately. var upload = s3Client.putObject(request, requestBody); try { // You can block and wait for the upload to finish upload.join(); } catch (Exception exception) { System.out.println("Unable to upload file, upload aborted."); exception.printStackTrace(); } finally { s3Client.close(); } } }
.NET

L’exemple C# suivant charge un fichier dans un compartiment S3 à l’aide de la classe TransferUtility et suit la progression du chargement. Pour plus d'informations sur la configuration et l'exécution des exemples de code, consultez Getting Started with the AWS SDK for .NET dans AWS le Guide du développeur du SDK pour .NET.

using Amazon; using Amazon.S3; using Amazon.S3.Transfer; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class TrackMPUUsingHighLevelAPITest { private const string bucketName = "*** provide the bucket name ***"; private const string keyName = "*** provide the name for the uploaded object ***"; private const string filePath = " *** provide the full path name of the file to upload **"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; public static void Main() { s3Client = new AmazonS3Client(bucketRegion); TrackMPUAsync().Wait(); } private static async Task TrackMPUAsync() { try { var fileTransferUtility = new TransferUtility(s3Client); // Use TransferUtilityUploadRequest to configure options. // In this example we subscribe to an event. var uploadRequest = new TransferUtilityUploadRequest { BucketName = bucketName, FilePath = filePath, Key = keyName }; uploadRequest.UploadProgressEvent += new EventHandler<UploadProgressArgs> (uploadRequest_UploadPartProgressEvent); await fileTransferUtility.UploadAsync(uploadRequest); Console.WriteLine("Upload completed"); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } static void uploadRequest_UploadPartProgressEvent(object sender, UploadProgressArgs e) { // Process event. Console.WriteLine("{0}/{1}", e.TransferredBytes, e.TotalBytes); } } }