@Override
  protected void doHandle(RestRequest restRequest, RestResponseChannel restResponseChannel,
      Callback<ReadableStreamChannel> callback) throws RestServiceException {
    if (S3MultipartUploadHandler.isMultipartCreateUploadRequest(restRequest)
        || S3MultipartUploadHandler.isMultipartCompleteUploadRequest(restRequest)) {
      multipartPostHandler.handle(restRequest, restResponseChannel, callback);
    } else if (isBatchDelete(restRequest)) {
      s3BatchDeleteHandler.handle(restRequest, restResponseChannel, callback);
    } else {
      // Placeholder for handling any non-multipart S3 POST requests in the future.
      throw new RestServiceException("Unsupported S3 POST request", RestServiceErrorCode.BadRequest);
    }
  }
Handles a request for putting a blob.
@param restRequest the {@link RestRequest} that contains the request parameters and body.
@param restResponseChannel the {@link RestResponseChannel} where headers should be set.
@param callback the {@link Callback} to invoke when the response is ready (or if there is an exception).
@throws RestServiceException exception when the processing fails
ambry-frontend/src/main/java/com/github/ambry/frontend/s3/S3PostHandler.java