code: private String initiateMultipartUpload(CopyObjectRequest origReq) {
  
          EncryptedInitiateMultipartUploadRequest req = new EncryptedInitiateMultipartUploadRequest(
                  origReq.getDestinationBucketName(),
                  origReq.getDestinationKey()).withCannedACL(
                  origReq.getCannedAccessControlList())
                  .withRequesterPays(origReq.isRequesterPays())
                  .withAccessControlList(origReq.getAccessControlList())
                  .withStorageClass(origReq.getStorageClass())
                  .withSSECustomerKey(origReq.getDestinationSSECustomerKey())
                  .withSSEAwsKeyManagementParams(origReq.getSSEAwsKeyManagementParams())
                  .withGeneralProgressListener(origReq.getGeneralProgressListener())
                  .withRequestMetricCollector(origReq.getRequestMetricCollector())
             ;
  
          req.setCreateEncryptionMaterial(false);
  
          ObjectMetadata newObjectMetadata = origReq.getNewObjectMetadata();
          if (newObjectMetadata == null){
              newObjectMetadata = new ObjectMetadata();
          }
          if (newObjectMetadata.getContentType() == null){
              newObjectMetadata.setContentType(metadata.getContentType());
          }
  
          req.setObjectMetadata(newObjectMetadata);
  
          populateMetadataWithEncryptionParams(metadata,newObjectMetadata);
  
          req.setTagging(origReq.getNewObjectTagging());
  
          req.withObjectLockMode(origReq.getObjectLockMode())
             .withObjectLockLegalHoldStatus(origReq.getObjectLockLegalHoldStatus())
             .withObjectLockRetainUntilDate(origReq.getObjectLockRetainUntilDate());
  
          String uploadId = s3.initiateMultipartUpload(req).getUploadId();
          log.debug("Initiated new multipart upload: " + uploadId);
  
          return uploadId;
      }
docs: Initiates a multipart upload and returns the upload id