Почему ObjectExist и listObjects не согласуются с Java API S3? - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть ведро S3 demo с объектом внутри него demo/somefolder.Когда я звоню s3.doesObjectExists("demo", "somefolder"), он возвращает false.Однако когда я вызываю s3.listObjects("demo", "somefolder"), возвращаемое значение ObjectListing имеет ссылки на список S3ObjectSummary.

Есть идеи о том, что здесь происходит?

1 Ответ

0 голосов
/ 10 февраля 2019

Из названия somefolder я предполагаю, что описываемый вами "объект" является "папкой", а не файлом.

doesObjectExist(String bucketName, String objectName) 

Этот тест для конкретного объекта с ключом objectName.

listObjects(String bucketName, String prefix)

Возвращает список всех объектов, ключ которых начинается с prefix.

Это два совершенно разных теста.

Если высоздала папку с помощью консоли S3 , тогда s3.doesObjectExists("demo", "somefolder/") было бы верно - обратите внимание на косую черту - но «папки» в S3 не существуют как значимый объект, и это на самом деле не является действительнымиспользование s3.doesObjectExist().

Консоль отобразит папку somefolder только по одной причине: поскольку в корзине существует один или несколько объектов с префиксом ключа somefolder/.Но чтобы упростить навигацию в сегменте без структуры, консоль позволяет создавать внешний вид структуры путем «создания папок» ... который фактически создает 0-байтовый объект с /, добавляемым в конец любого имени, которое выпредоставляется (но консоль подавляет отображение самого объекта).Эти объекты не служат никакой другой цели, кроме консольной навигации.Загруженный программным способом объект с ключом pics/cat.jpg по-прежнему будет вызывать появление в консоли «папки» pics без необходимости сначала создавать этот объект, подобный папке-заполнителю ... поэтому наличие или отсутствие этихОбъекты не имеют смысла проверять, есть ли такая «папка» в корзине.

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