code: public Task<AwsS3PutObjectResult> putObject(
        @NonNull final String bucket,
        @NonNull final String key,
        @NonNull final String acl,
        @NonNull final String contentType,
        @NonNull final InputStream body) {
      return dispatcher.dispatchTask(new Callable<AwsS3PutObjectResult>() {
        @Override
        public AwsS3PutObjectResult call() throws IOException {
          return proxy.putObject(bucket, key, acl, contentType, body);
        }
      });
    }
docs: Puts an object.
  
  @param bucket the bucket to put the object in.
  @param key the key (or name) of the object.
  @param acl the ACL to apply to the object (e.g. private).
  @param contentType the content type of the object (e.g. application/json).
  @param body the body of the object.
  @return the result of the put which contains the location of the object. The task will
  have an {@link IOException} in the event the body cannot be read.