code: public MultipleFileUpload uploadFileList(String bucketName, String virtualDirectoryKeyPrefix, File directory, List<File> files,ObjectMetadataProvider metadataProvider) {
          return uploadFileList(bucketName, virtualDirectoryKeyPrefix, directory, files, metadataProvider,null);
      }
docs: Uploads all specified files to the bucket named, constructing
  relative keys depending on the commonParentDirectory given.
  <p>
  S3 will overwrite any existing objects that happen to have the same key,
  just as when uploading individual files, so use with caution.
  </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 bucketName
  The name of the bucket to upload objects to.
  @param virtualDirectoryKeyPrefix
  The key prefix of the virtual directory to upload to. Use the
  null or empty string to upload files to the root of the
  bucket.
  @param directory
  The common parent directory of files to upload. The keys
  of the files in the list of files are constructed relative to
  this directory and the virtualDirectoryKeyPrefix.
  @param files
  A list of files to upload. The keys of the files are
  calculated relative to the common parent directory and the
  virtualDirectoryKeyPrefix.
  @param metadataProvider
  A callback of type <code>ObjectMetadataProvider</code> which
  is used to provide metadata for each file being uploaded.