code: public Upload upload(final PutObjectRequest putObjectRequest)
              throws AmazonServiceException, AmazonClientException {
          return doUpload(putObjectRequest, null, null, null);
      }
docs: <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/">AWS
  KMS</a>-encrypted objects, you need to specify the correct region of the
  bucket on your client and configure AWS 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.
  
  @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.