К сожалению, нет простого способа добиться этого, но вы можете использовать AWS команду CLI
Первое решение
Выполните следующую команду из вашего кода. Используйте пакет child_process
или npm, например shell js. В этом случае вам также потребуется аутентифицировать интерфейс командной строки.
aws s3 ls s3://yourBucket/storage/{USER ID}/docs --recursive --human-readable --summarize
Это вернет такие данные:
2013-09-02 21:37:53 10 Bytes a.txt
2013-09-02 21:37:53 2.9 MiB foo.zip
2013-09-02 21:32:57 23 Bytes foo/bar/.baz/a
2013-09-02 21:32:58 41 Bytes foo/bar/.baz/b
2013-09-02 21:32:57 281 Bytes foo/bar/.baz/c
2013-09-02 21:32:57 73 Bytes foo/bar/.baz/d
2013-09-02 21:32:57 452 Bytes foo/bar/.baz/e
2013-09-02 21:32:57 896 Bytes foo/bar/.baz/hooks/bar
2013-09-02 21:32:57 189 Bytes foo/bar/.baz/hooks/foo
2013-09-02 21:32:57 398 Bytes z.txt
Total Objects: 10
Total Size: 2.9 MiB
И вы можете проанализировать его общий размер.
Второе решение
Используйте метод Node AWS SDK ListObjectsV2 . Уловка в том, что он возвращает только до 1000 результатов за один вызов и предоставляет маркер для следующей страницы. Вам нужно написать logi c для разбивки на страницы.
Результат будет:
{
Contents: [
{
Key: "example1.jpg",
// ... Other details
Size: 11,
},
{
Key: "example2.mp4",
// ... Other details
Size: 784335,
},
],
NextMarker: "eyJNYXJrZXIiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAyfQ=="
}
Вам просто нужно добавить все размеры.
Третье решение
Если файлы выгружаются с вашей платформы, лучше всего сохранить размер содержимого где-нибудь в базе данных и выполнить запрос, чтобы получить размеры.