ECS: Comprobación de la existencia del objeto S3
Summary: Cómo comprobar la existencia de un objeto en s3.
Instructions
Uso de HEAD para comprobar de manera más eficiente la existencia de un objeto.
La lista de objetos es una forma inherentemente ineficaz de comprobar la existencia de un objeto específico. La búsqueda de índices no solo es relativamente lenta para esta solicitud específica, sino que también puede afectar la carga y el rendimiento generales.
Solicitar un objeto específico siempre es más eficiente que solicitar uno o más objetos que coincidan con los parámetros. La lista de objetos es una forma de búsqueda en la que se deben consultar los índices distribuidos.
El uso de HEAD en el objeto es el mejor método para comprobar que existe. Con el SDK de objetos de ECS, esto se realiza con GetObjectMetadataRequest.
Si el objeto NO existe, el SDK produce la siguiente excepción debido a una respuesta de error 404:
Exception in thread "main" com.emc.object.s3.S3Exception: Not Found
A continuación, se muestra un ejemplo del uso de GetObjectMetadataRequest, que se utiliza en el método de cliente 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()); }
Si se utiliza el SDK java de AWS y el objeto no existe, el SDK produce la siguiente excepción.
com.amazonaws.services.s3.model.AmazonS3Exception: Not Found
He aquí un ejemplo de ello:
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()); }
Compruebe si el objeto existe para determinar si se necesita putObject.
Si se comprueba la existencia del objeto para determinar si se necesita putObject, considere la posibilidad de usar métodos condicionales PutObjectRequests:
withIfMatch() and withIfNoneMatch().
Ambos métodos necesitan un valor etag de objeto y utilizan los encabezados "if-match","if-none-match" en la solicitud PUT.
También existen los métodos withIfUnmodifiedSince() y withIfModifiedSince(), cada uno de los cuales toma un objeto Date.
Si etag o md5 no están disponibles, sería necesario recuperarlos con GetObjectMetadataRequest.
Una alternativa eficiente sería usar withIfUnmodifiedSince() si la fecha fuera lo suficientemente antigua.
SR con soporte técnico de ECS
Si le preocupa la existencia de un objeto, abra una solicitud de servicio con el equipo de soporte de ECS.