ECS. Проверка существования объекта S3

Summary: Как проверить существование объекта в s3.

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Instructions

Использование HEAD для более эффективной проверки существования объекта.

Перечисление объектов по своей сути является неэффективным способом проверки существования конкретного объекта. Поиск по индексу не только относительно медленный для этого конкретного запроса, но и может повлиять на общую нагрузку и производительность.

Запрос конкретного объекта всегда более эффективен, чем запрос одного или нескольких объектов, соответствующих параметрам. Перечисление объектов — это форма поиска, при которой необходимо запрашивать распределенные индексы.

Использование HEAD на объекте является лучшим методом проверки его существования. В объектном SDK ECS это делается с помощью GetObjectMetadataRequest.

 
Если объект НЕ существует, пакет SDK создает следующее исключение из-за ответа об ошибке 404:

 

Exception in thread "main" com.emc.object.s3.S3Exception: Not Found

 



Ниже приведен пример использования GetObjectMetadataRequest, который используется в клиентском методе getObjectMetadata:

try { GetObjectMetadataRequest gom = new GetObjectMetadataRequest(<bucket>, <key>); S3ObjectMetadata om = s3.getObjectMetadata(gom); System.out.println("etag: " + om.getETag()); System.out.println("last modified: " + om.getLastModified().toString()); } catch(com.emc.object.s3.S3Exception e) { System.out.println("What happened: " + e.getMessage()); }

  
Если используется AWS java SDK, а объект не существует, SDK выдает следующее исключение. 

com.amazonaws.services.s3.model.AmazonS3Exception: Not Found

 
Вот пример:

try { GetObjectMetadataRequest gom = new GetObjectMetadataRequest(AWSS3Factory.S3_BUCKET, key); s3.getObjectMetadata(gom); } catch(com.amazonaws.services.s3.model.AmazonS3Exception e) { System.out.println("What happened: " + e.getMessage()); }

 Проверьте, существует ли объект, чтобы определить, нужен ли putObject.

Если проверка существования объекта для определения того, нужен ли putObject, рассмотрите возможность использования условных методов PutObjectRequests:
 

withIfMatch() and withIfNoneMatch().

Оба этих метода требуют значения etag объекта и используют заголовки "if-match","if-none-match" в запросе PUT.
Существуют также методы withIfUnmodifiedSince() и withIfModifiedSince(), каждый из которых принимает объект Date.

Если etag или md5 недоступны, их необходимо извлечь с помощью GetObjectMetadataRequest.
Эффективной альтернативой было бы использование withIfUnmodifiedSince(), если Date был достаточно старым. 

SR с технической поддержкой ECS

Если есть сомнения в существовании объекта, отправьте сервисную заявку в службу поддержки ECS.
 

Affected Products

Elastic Cloud Storage

Products

Elastic Cloud Storage
Article Properties
Article Number: 000014759
Article Type: How To
Last Modified: 22 May 2025
Version:  4
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.