100 votes

Comment vérifier si une clé spécifiée existe dans un compartiment S3 donné à l'aide de Java

Je voudrais vérifier si une clé existe dans un compartiment donné à l'aide de Java. J'ai regardé l'API mais il n'y a pas de méthodes utiles. J'ai essayé d'utiliser getObject mais cela a généré une exception.

321voto

lmichelbacher Points 521

Il y a maintenant une méthode faisObjectExist dans l'API Java officielle.

Prendre plaisir!

60voto

Mettre à jour:

Il semble qu'il y ait une nouvelle API pour vérifier cela. Voir une autre réponse dans cette page : https://stackoverflow.com/a/36653034/435605

Message d'origine :

Utiliser errorCode.equals("NoSuchKey")

 try {
    AmazonS3 s3 = new AmazonS3Client(new ClasspathPropertiesFileCredentialsProvider());
    String bucketName = getBucketName();
    s3.createBucket(bucketName);
    S3Object object = s3.getObject(bucketName, getKey());
} catch (AmazonServiceException e) {
    String errorCode = e.getErrorCode();
    if (!errorCode.equals("NoSuchKey")) {
        throw e;
    }
    Logger.getLogger(getClass()).debug("No such key!!!", e);
}

Remarque sur l'exception : je sais que les exceptions ne doivent pas être utilisées pour le contrôle de flux. Le problème est qu'Amazon n'a fourni aucune API pour vérifier ce flux - juste une documentation sur l'exception.

24voto

user979051 Points 513

À l'aide du kit SDK AWS, utilisez la méthode getObjectMetadata. La méthode lèvera une AmazonServiceException si la clé n'existe pas.

 private AmazonS3 s3;
...
public boolean exists(String path, String name) {
    try {
        s3.getObjectMetadata(bucket, getS3Path(path) + name); 
    } catch(AmazonServiceException e) {
        return false;
    }
    return true;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X