code: @Override
      public void upload(String path, InputStream payload, long payloadSize) {
          try {
              ObjectMetadata objectMetadata = new ObjectMetadata();
              objectMetadata.setContentType(CONTENT_TYPE);
              objectMetadata.setContentLength(payloadSize);
              PutObjectRequest request = new PutObjectRequest(bucketName, path, payload, objectMetadata);
              s3Client.putObject(request);
          } catch (SdkClientException e) {
              String msg = "Error communicating with S3";
              logger.error(msg, e);
              throw new ApplicationException(ApplicationException.Code.BACKEND_ERROR, msg, e);
          }
      }
docs: Uploads the payload to the given s3 object key.
  It is expected that the caller retrieves the object key using {@link #getLocation(Operation, PayloadType, String)} before making this call.
  
  @param path        the s3 key of the object to be uploaded
  @param payload     an {@link InputStream} containing the json payload which is to be uploaded
  @param payloadSize the size of the json payload in bytes