Невозможно получить только объекты подпапок из s3 aws - PullRequest
0 голосов
/ 11 июня 2018

Я использую эту функцию для получения данных из S3:

 s3 = boto3.resource('s3')
    s3client = boto3.client('s3')
    Bucket = s3.Bucket('ais-django');
    obj = s3.Object('ais-django', 'Event/')


    list = s3client.list_objects_v2(Bucket='ais-django' ,Prefix='Event/' )  
    for s3_key in list:
         filename = s3_key['Key'] 

Когда я использую префикс для папки «Событие» (путь похож на «ais-django / Event /»), он выдает необычный вывод, например:

{
  'IsTruncated': False,
  'Prefix': 'Event/',
  'ResponseMetadata': {
    'HTTPHeaders': {
      'date': 'Mon, 11 Jun 2018 12:42:35 GMT',
      'content-type': 'application/xml',
      'transfer-encoding': 'chunked',
      'x-amz-bucket-region': 'us-east-1',
      'x-amz-request-id': '94ADDB21361252F3',
      'server': 'AmazonS3',
      'x-amz-id-2': 'IVuVQuB2V7nClm5FaX4FRbt6brS3gAiuwpERnZxknIWoZLH65LerURwmoynKW5sv37VP6FdbYho='
    },
    'RequestId': '94ADDB21361252F3',
    'RetryAttempts': 0,
    'HostId': 'IVuVQuB2V7nClm5FaX4FRbt6brS3gAiuwpERnZxknIWoZLH65LerURwmoynKW5sv37VP6FdbYho=',
    'HTTPStatusCode': 200
  },
  'MaxKeys': 1000,
  'Name': 'ais-django',
  'KeyCount': 0
}

без добавления префикса, когда я добавляю вот так:

list = s3client.list_objects_v2(Bucket='ais-django' )[Contents]

это дает список всех объектов.

Так как я могу получить все объекты в определенномпапка?

1 Ответ

0 голосов
/ 11 июня 2018

это то, как вы должны это сделать:)

import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('ais-django')

for o in bucket.objects.filter(Prefix='Event/test-event'):
    print(o.key)

это результат, который вы получите

result1

результат содержит Event / test-event / , поскольку в AWS s3 нет системы папок, все является объектом, следовательно Event / test-event / , а также Event/test-event/image.jpg оба рассматриваются как объекты.

если вы хотите только содержимое, т. е. только изображение, вы можете сделать это так,

import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('ais-django')

for o in bucket.objects.filter(Prefix='Event/test-event'):
    filename=o.key
    if filename.endswith(".jpeg") or filename.endswith(".jpg") or filename.endswith(".png"):
        print(o.key) 

Теперьв этом случае мы получаем Event / test-event / 18342087_1323920084341024_7613721308394107132_n.jpg в результате, поскольку мы отфильтровываем наши результаты, и это единственный объект изображения в моем ведре прямо сейчас

result2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...