Задать вопрос

S3: Есть ли возможность получить количество всех объектов в папке бакета не выгружая все эти объекты в память?

Вопрос касательно Amazon S3.
У меня есть бакет, есть нужная папка, мне нужно получить количество объектов в ней не выгружая их всех в память. Возможно ли это сделать? Юзаю AWS SDK PHP, но пока что нашел вариант ListObjects, и сделать count всех элементов, что как раз и пригружает память, а я хочу этого избежать, и получить в ответе только цифру количества элементов
  • Вопрос задан
  • 355 просмотров
Подписаться 3 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
inoise
@inoise Куратор тега PHP
Solution Architect, AWS Certified, Serverless
Только через list с фильтром. И ещё, в s3 нет директорий и никогда не было - это все симуляция для не окрепшего мозга людей, живущих с папочками на своем компьютере
Ответ написан
@mlstart
public function count_files_in_folder($folder = '')
    {
        $total = 0;
        $prefix = rtrim($this->project_dir . '/' . $folder, '/') . '/';

        $results = $this->s3->getPaginator('ListObjects', [
            'Bucket' => $this->bucket_name,
            'Prefix' => $prefix
        ]);

        foreach ($results as $result) {
            foreach ($result['Contents'] as $object) {
                if (!(substr($object['Key'], -1) === '/' && (int)$object['Size'] === 0)) {
                    $total++;
                }
            }
        }

        return $total;
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы