Я пытаюсь портировать кодовую базу 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/']
Это ошибка или я что-то упустил?