2

J'essaie de vérifier si un fichier pdf particulier existe sur AWS S3 en utilisant aws-sdk gem (version 2) dans l'application ruby ​​on rails.Vérifiez si un fichier existe sur le chemin AWS S3 en utilisant aws-sdk gem

J'ai la connexion AWS établie et en utilisant exists? méthode:

puts @bucket.objects(prefix:"path/sample_100.pdf").exists?

sur l'exécution de la déclaration ci-dessus, je reçois le ci-dessous aucune erreur de méthode:

undefined method 'exists?' for Aws::Resources::Collection

Contrôlé quelques documents, mais de pas beaucoup d'aide. Y a-t-il un autre moyen d'atteindre la même chose?

Merci à l'avance

+0

Bruno La réponse est probablement meilleure réponse si vous voulez vérifier si un fichier en dehors de votre application existe. Pourtant, si le fichier est téléchargé à partir de votre application (avec trombone, onde porteuse, sanctuaire ..) le fichier téléchargé fait partie de votre application et existe dans votre base de données d'application, et c'est facile à vérifier. – Maxence

+0

@Maxence Merci pour l'entrée. J'ai compris la solution. Le fichier pdf que je recherche est stocké dans le compartiment AWS S3 et l'application utilise ** aws-sdk gem ** (https://github.com/aws/aws-sdk-ruby) pour effectuer de telles actions. –

Répondre

0

Je ne suis pas moi-même développeur Ruby, mais je pourrais être en mesure de proposer quelque chose.

La méthode habituelle pour vérifier si un objet existe dans Amazon S3 utilise l'opération HEAD Object. Fondamentalement, il renvoie les métadonnées (mais pas de contenu) d'un objet s'il existe, ou une erreur 404 si ce n'est pas le cas. C'est comme GET Object, mais sans le contenu de l'objet.

Je viens de regarder dans le AWS SDK pour Ruby API de référence et trouvé cette méthode:

http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Client.html#head_object-instance_method

Jetez un oeil à cela, il est probablement ce que vous recherchez.

+1

Merci beaucoup pour cet aperçu. Essentiellement, j'essayais de rechercher un fichier pdf sur un seau AWS S3 et, s'il existait, d'effectuer d'autres actions sur celui-ci. ** existe? ** méthode a fonctionné pour moi. Je viens de placer le chemin du fichier aws dans une variable, puis j'appelle la méthode exists. Cela retourne vrai lors de l'exécution. 'file =" path/sample_100.pdf "' '@ bucket.objects (fichier) .exists?' –

1

Je vous recommande d'utiliser la gemme S3 beaucoup plus simple: https://github.com/qoobaa/s3 Si vous avez seulement besoin de faire face à S3. Vous serez en mesure de le faire de cette façon: de

object = bucket.objects.find("example.pdf")

+0

Merci @ CV-Gate pour la gemme alternative S3. Je vais sûrement essayer. Mais l'application actuelle l'utilise déjà fortement. –