D’autres exemples de kits AWS SDK sont disponibles dans le référentiel GitHub AWS Doc SDK Examples
Utilisation de UploadPart avec un kit SDK AWS
L’exemple de code suivant illustre comment utiliser UploadPart.
- Java
-
- SDK pour Java 2.x
-
Note
Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS
. Chargez une partie d’un chargement partitionné pour un compartiment de répertoires.
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.CompletedPart; import software.amazon.awssdk.services.s3.model.S3Exception; import software.amazon.awssdk.services.s3.model.UploadPartRequest; import software.amazon.awssdk.services.s3.model.UploadPartResponse; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import static com.example.s3.util.S3DirectoryBucketUtils.abortDirectoryBucketMultipartUploads; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucketMultipartUpload; import static com.example.s3.util.S3DirectoryBucketUtils.createS3Client; import static com.example.s3.util.S3DirectoryBucketUtils.deleteAllObjectsInDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.deleteDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.getFilePath; /** * This method creates part requests and uploads individual parts to S3. * While it uses the UploadPart API to upload a single part, it does so * sequentially to handle multiple parts of a file, returning all the completed * parts. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @param objectKey The key (name) of the object to be uploaded * @param uploadId The upload ID used to track the multipart upload * @param filePath The path to the file to be uploaded * @return A list of uploaded parts * @throws IOException if an I/O error occurs */ public static List<CompletedPart> multipartUploadForDirectoryBucket(S3Client s3Client, String bucketName, String objectKey, String uploadId, Path filePath) throws IOException { logger.info("Uploading parts for object: {} in bucket: {}", objectKey, bucketName); int partNumber = 1; List<CompletedPart> uploadedParts = new ArrayList<>(); ByteBuffer bb = ByteBuffer.allocate(1024 * 1024 * 5); // 5 MB byte buffer // Read the local file, break down into chunks and process try (RandomAccessFile file = new RandomAccessFile(filePath.toFile(), "r")) { long fileSize = file.length(); int position = 0; // Sequentially upload parts of the file while (position < fileSize) { file.seek(position); int read = file.getChannel().read(bb); bb.flip(); // Swap position and limit before reading from the buffer UploadPartRequest uploadPartRequest = UploadPartRequest.builder() .bucket(bucketName) .key(objectKey) .uploadId(uploadId) .partNumber(partNumber) .build(); UploadPartResponse partResponse = s3Client.uploadPart( uploadPartRequest, RequestBody.fromByteBuffer(bb)); // Build the uploaded part CompletedPart uploadedPart = CompletedPart.builder() .partNumber(partNumber) .eTag(partResponse.eTag()) .build(); // Add the uploaded part to the list uploadedParts.add(uploadedPart); // Log to indicate the part upload is done logger.info("Uploaded part number: {} with ETag: {}", partNumber, partResponse.eTag()); bb.clear(); position += read; partNumber++; } } catch (S3Exception e) { logger.error("Failed to list parts: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode()); throw e; } return uploadedParts; }-
Pour plus de détails sur l’API, consultez UploadPart dans la Référence des API du kit AWS SDK for Java 2.x.
-
PutObject
UploadPartCopy