ECS: Verificando a existência do objeto S3
Summary: Como verificar a existência do objeto no s3.
Instructions
Usando o HEAD para verificar com mais eficiência a existência de um objeto.
A listagem de objetos é uma maneira inerentemente ineficiente de verificar a existência de um objeto específico. A pesquisa de índice não só é relativamente lenta para essa solicitação específica, mas também pode afetar a carga e o desempenho gerais.
Solicitar um objeto específico é sempre mais eficiente do que solicitar um ou mais objetos que correspondam aos parâmetros. A listagem de objetos é uma forma de pesquisa em que os índices distribuídos devem ser consultados.
Usar o HEAD no objeto é o melhor método para verificar se ele existe. Com o SDK de objeto do ECS, isso é feito com o GetObjectMetadataRequest.
Se o objeto NÃO existir, o SDK lançará a seguinte exceção devido a uma resposta de erro 404:
Exception in thread "main" com.emc.object.s3.S3Exception: Not Found
Aqui está um exemplo de uso do GetObjectMetadataRequest que é usado no 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()); }
Se estiver usando o SDK do Java AWS e o objeto não existir, o SDK lançará a seguinte exceção.
com.amazonaws.services.s3.model.AmazonS3Exception: Not Found
Aqui está um exemplo disso:
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()); }
Verifique se o objeto existe para determinar se putObject é necessário.
Se estiver verificando a existência do objeto para determinar se putObject é necessário, considere o uso de métodos condicionais PutObjectRequests:
withIfMatch() and withIfNoneMatch().
Ambos os métodos precisam de um valor de etag de objeto e usam os cabeçalhos "if-match", " if-none-match" na solicitação PUT.
Há também os métodos withIfUnmodifiedSince() e withIfModifiedSince() que cada um usa um objeto Date.
Se a etag ou md5 não estiverem disponíveis, será necessário recuperá-la com um GetObjectMetadataRequest.
Uma alternativa eficiente seria usar o withIfUnmodifiedSince() se a Data fosse velha o suficiente.
SR com suporte técnico do ECS
Se houver uma dúvida sobre a existência de um objeto, abra um chamado com a equipe de suporte do ECS.