2 votes

AWS S3 - Obtenir un objet aboutit à une erreur 404 NoSuchKey

Je suis en train d'utiliser AWS SDK pour mettre des images sur mon instance S3. Je suis capable de le faire avec succès via :

AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());

s3client.putObject(new PutObjectRequest(bucketName, key, file));

Je peux également voir le fichier téléchargé en naviguant dans le système S3 sur la page de la console. Cependant, lorsque j'essaie de récupérer le même fichier via le SDK, je reçois une erreur 404 "NoSuchKey" :

AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());

S3Object result = s3client.getObject(new GetObjectRequest(bucketName, key));

Et voici l'erreur exacte :

com.amazonaws.services.s3.model.AmazonS3Exception: La clé spécifiée n'existe pas. (Service : Amazon S3 ; Code d'état : 404 ; Code d'erreur : NoSuchKey ;

Quelqu'un sait pourquoi ?

2voto

vbbharath Points 97

Assurez-vous que le nom de votre clé ne contient aucun des caractères spéciaux qui seront décryptés dans l'URL. Un scénario courant est si votre clé contient '+' il sera décrypté en espace vide lorsque vous récupérez vos clés en utilisant l'API getKey() de la classe S3ObjectSummary.

Caractères Qui Pourraient Nécessiter un Traitement Spécial

Les caractères suivants dans un nom de clé peuvent nécessiter un traitement supplémentaire et devront probablement être encodés en URL ou référencés en HEX. Certains d'entre eux sont des caractères non imprimables et votre navigateur pourrait ne pas les gérer, ce qui nécessite également un traitement spécial :

Et commercial ("&")

Dollar ("$")

Plage de caractères ASCII 00-1F hex (0-31 décimal) et 7F (127 décimal)

Arobase ("@")

Égal ("=")

Point-virgule (";")

Deux-points (":")

Plus ("+")

Espace - Les séquences significatives d'espaces peuvent être perdues dans certaines utilisations (surtout plusieurs espaces)

Virgule (",")

Point d'interrogation ("?")

https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html

1voto

Anushua Dutta Points 11

La même chose m'est arrivée. Rien n'était incorrect dans le nom du fichier et le fichier se trouvait dans le bon dossier sous le bucket. Le problème était que j'avais ajouté "/" juste avant le chemin qui formait la clé. Par exemple, si la structure du dossier était téléchargements / modèle sous le bucket, j'avais spécifié la clé comme "/telechargements / modele". Le problème a été résolu en le changeant en "telechargements / modele"

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