ЕКС: Перевірка існування об'єкта 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 на об'єкті є найкращим методом перевірки його існування. З ECS object SDK це робиться за допомогою 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(), якщо дата була достатньо старою.

СР з технічною підтримкою 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.