public static void uploadFile()

in src/main/java/com/amazonaws/codepipeline/jenkinsplugin/PublisherTools.java [82:136]


    public static void uploadFile(
            final File file,
            final Artifact artifact,
            final CompressionType compressionType,
            final EncryptionKey encryptionKey,
            final AmazonS3 amazonS3,
            final BuildListener listener) throws IOException {

        LoggingHelper.log(listener, "Uploading artifact: " + artifact + ", file: " + file);

        final String bucketName = artifact.getLocation().getS3Location().getBucketName();
        final String objectKey  = artifact.getLocation().getS3Location().getObjectKey();
        final List<PartETag> partETags = new ArrayList<>();

        final InitiateMultipartUploadRequest initiateMultipartUploadRequest = new InitiateMultipartUploadRequest(
                bucketName,
                objectKey,
                createObjectMetadata(compressionType))
            .withSSEAwsKeyManagementParams(toSSEAwsKeyManagementParams(encryptionKey));

        final InitiateMultipartUploadResult initiateMultipartUploadResult
                = amazonS3.initiateMultipartUpload(initiateMultipartUploadRequest);

        final long contentLength = file.length();
        long filePosition = 0;
        long partSize = 5 * 1024 * 1024; // Set part size to 5 MB

        for (int i = 1; filePosition < contentLength; i++) {
            partSize = Math.min(partSize, (contentLength - filePosition));

            final UploadPartRequest uploadPartRequest = new UploadPartRequest()
                    .withBucketName(bucketName)
                    .withKey(objectKey)
                    .withUploadId(initiateMultipartUploadResult.getUploadId())
                    .withPartNumber(i)
                    .withFileOffset(filePosition)
                    .withFile(file)
                    .withPartSize(partSize);

            partETags.add(amazonS3.uploadPart(uploadPartRequest).getPartETag());

            filePosition += partSize;
        }

        final CompleteMultipartUploadRequest completeMultipartUpload
                = new CompleteMultipartUploadRequest(
                    bucketName,
                    objectKey,
                    initiateMultipartUploadResult.getUploadId(),
                    partETags);

        amazonS3.completeMultipartUpload(completeMultipartUpload);

        LoggingHelper.log(listener, "Upload successful");
    }