public Upload upload(final PutObjectRequest putObjectRequest,
            final S3ProgressListener progressListener)
            throws AmazonServiceException, AmazonClientException {
        return doUpload(putObjectRequest, null, progressListener, null);
    }
<p>
Schedules a new transfer to upload data to Amazon S3. This method is
non-blocking and returns immediately (i.e. before the upload has
finished).
</p>
<p>
Use the returned <code>Upload</code> object to query the progress of the
transfer, add listeners for progress events, and wait for the upload to
complete.
</p>
<p>
If resources are available, the upload will begin immediately. Otherwise,
the upload is scheduled and started as soon as resources become
available.
</p>
<p>
If you are uploading <a href="http://aws.amazon.com/kms/">Amazon Web Services
KMS</a>-encrypted objects, you need to specify the correct region of the
bucket on your client and configure Amazon Web Services Signature Version 4 for added
security. For more information on how to do this, see
http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#
specify-signature-version
</p>

@param putObjectRequest
           The request containing all the parameters for the upload.
@param progressListener
           An optional callback listener to receive the progress of the
           upload.

@return A new <code>Upload</code> object to use to check the state of the
        upload, listen for progress notifications, and otherwise manage
        the upload.

@throws AmazonClientException
            If any errors are encountered in the client while making the
            request or handling the response.
@throws AmazonServiceException
            If any errors occurred in Amazon S3 while processing the
            request.
aws-java-sdk-s3/src/main/java/com/amazonaws/services/s3/transfer/TransferManager.java