Как правильно использовать разделитель с AWSSDK.S3? - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь портировать кодовую базу Python на F # с помощью AWSSDK.S3 версии 3.3.110.3.

Существует очень простая функция:

 let getDirectories(amazonS3Client:AmazonS3Client) (bucket) (prefix) =
  let listObjectsRequest = ListObjectsRequest(BucketName=bucket, Delimiter = "/", Prefix=prefix)
  let task = amazonS3Client.ListObjectsAsync(listObjectsRequest)
  task.Wait()
  if task.IsCompletedSuccessfully then
    Some(task.Result.S3Objects)
  else
    None

К сожалению, это делает не вернуть правильные результаты. В папке примера находятся следующие записи:

aws --profile my-profile s3 ls s3://bucket/tmp/test1/ --recursive
2020-01-29 20:36:04          0 tmp/test1/
2020-01-29 20:36:11          0 tmp/test1/test2/
2020-01-29 20:37:00     698600 tmp/test1/test2/49442611463_5a23408a04_k.jpg
2020-01-29 20:36:18          0 tmp/test1/test3/

Вызов getDirectories () приводит к следующему:

key = tmp/test1/ size = 0

Python код:

def list_objects_in_s3(s3_client, filters):
    paginator = s3_client.get_paginator('list_objects')
    page_iterator = paginator.paginate(
      **filters,
      PaginationConfig={'MaxItems': 10000, 'PageSize': 50})
    ret = []
    for page in page_iterator:
        logging.debug(page)
        if page.get('CommonPrefixes',[]):
            for content in page.get('CommonPrefixes'):
                ret.append(content['Prefix'])

partition_filter = { 'Bucket': 'bucket',
                     'Prefix': 'tmp/test1/',
                     'Delimiter': '/' }
partitions = list_objects_in_s3(s3_client, partition_filter)
logging.info(partitions)

Та же функция с Python приводит к следующему:

2020-01-30 17:34:01 INFO ['tmp/test1/test2/', 'tmp/test1/test3/']

Это ошибка или я что-то упустил?

...