Различие между файлом и папкой с одинаковым именем aws s3 - PullRequest
0 голосов
/ 23 апреля 2020

Кажется, я не понимаю, как это работает.

Допустим, у меня есть следующая структура:

s3:/bucket1/file1
s3:/bucket1/file2
s3:/bucket1/dir1/file3
s3:/bucket1/dir1/file4

Теперь, когда я хочу перечислить все содержимое (включая "каталоги", например, dir1) я могу сделать:

    ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
            .withBucketName("bucket1")
            .withPrefix("")
            .withDelimiter("/");

    return awsS3Client.listObjects(listObjectsRequest);

Здесь Objectsummaries содержит file1 и file2, общие префиксы содержат dir1

и для вывода содержимого / bucket1 / dir1 я мог бы сделать

    ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
            .withBucketName("bucket1")
            .withPrefix("dir1/")
            .withDelimiter("/");

    return awsS3Client.listObjects(listObjectsRequest);

Теперь, если я хочу проверить, существует ли какая-либо папка, я могу сделать:

    ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
            .withBucketName("bucket1")
            .withPrefix("dir1/")
            .withDelimiter("/");

    return awsS3Client.listObjects(listObjectsRequest).getObjectSummiaries().size() > 0;

Здесь я проверяю, был ли найден ровно один объект

, и я хотел проверить, существует ли какой-либо файл

    ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
            .withBucketName("bucket1")
            .withPrefix("file1")
            .withDelimiter("/");
    return awsS3Client.listObjects(listObjectRequest).getObjectSummaries().size() == 1

Но мой вопрос в том, чтобы имитировать каталог, мы помещаем в него объект с пустым содержимым и с "/" в конце, а это означает, что я могу иметь файл и каталог с одинаковым именем. В таком случае, как бы я отличил sh это?

1 Ответ

0 голосов
/ 23 апреля 2020

У вас не может быть нескольких объектов с одним и тем же ключом.

Это означает, что побеждает последний контент, добавленный вами с данным ключом. Нельзя путать между «папкой» и «файлом» с одинаковым именем.

На самом деле в S3 нет концепции папок, консоль просто создает у нас такое впечатление из-за того, как файловые системы работает. Лучше, если вы думаете о S3 как о базе данных ключ / значение.

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