@Override
  protected MultipartFile[] readInternal(
      Class<? extends MultipartFile[]> clazz, HttpInputMessage inputMessage) throws IOException {
    val headers = inputMessage.getHeaders();
    if (headers == null) {
      throw new HttpMessageNotReadableException("There are no headers at all.", inputMessage);
    }

    MediaType contentType = headers.getContentType();
    if (contentType == null) {
      throw new HttpMessageNotReadableException("Content-Type is missing.", inputMessage);
    }

    val boundaryBytes = getMultiPartBoundary(contentType);
    MultipartStream multipartStream =
        new MultipartStream(inputMessage.getBody(), boundaryBytes, bufSize, null);

    val multiparts = new LinkedList<ByteArrayMultipartFile>();
    for (boolean nextPart = multipartStream.skipPreamble();
        nextPart;
        nextPart = multipartStream.readBoundary()) {
      ByteArrayMultipartFile multiPart;
      try {
        multiPart = readMultiPart(multipartStream);
      } catch (Exception e) {
        throw new HttpMessageNotReadableException(
            "Multipart body could not be read.", e, inputMessage);
      }
      multiparts.add(multiPart);
    }
    return multiparts.toArray(new ByteArrayMultipartFile[0]);
  }
Construct an {@code AbstractHttpMessageConverter} that can read mulitpart/form-data.

@param bufSize The size of the buffer (in bytes) to read the HTTP multipart body.
form-spring/src/main/java/feign/form/spring/converter/SpringManyMultipartFilesReader.java