2

Ich versuche zu überprüfen, ob eine bestimmte PDF-Datei auf AWS S3 mit AWS-SDK Gem (Version 2) in Ruby on Rails Anwendung vorhanden ist.Überprüfen Sie, ob eine Datei auf AWS S3 Pfad mit AWS-SDK Gem

Ich habe die AWS-Verbindung hergestellt und derzeit exists? Methode:

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

auf die obige Aussage ausgeführt wird, erhalte ich die unten ohne Fehler Methode:

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

wenige Dokumente überprüft, aber von nicht viel Hilfe. Gibt es einen anderen Weg, um das Gleiche zu erreichen?

Vielen Dank im Voraus

+0

Brunos Antwort ist wahrscheinlich beste Antwort, wenn Sie liegt vor, wenn eine Datei außerhalb der Anwendung überprüfen möchten. Wenn die Datei jedoch von Ihrer Anwendung hochgeladen wird (mit Büroklammer, Carrierwave, Schrein ...), ist die hochgeladene Datei Teil Ihrer Anwendung und existiert in Ihrer Anwendungsdatenbank, was leicht zu überprüfen ist. – Maxence

+0

@Maxence Danke für die Eingabe. Ich habe die Lösung herausgefunden. Die von mir gesuchte PDF-Datei wird im AWS S3-Bucket gespeichert, und die Anwendung verwendet ** aws-sdk gem ** (https://github.com/aws/aws-sdk-ruby), um solche Aktionen auszuführen. –

Antwort

0

Ich bin kein Ruby-Entwickler selbst, aber ich könnte in der Lage sein, etwas zu suggerieren.

Die übliche Methode zur Überprüfung, ob ein Objekt in Amazon S3 vorhanden ist, ist die Verwendung der HEAD Object Operation. Im Grunde gibt es die Metadaten (aber keinen Inhalt) eines Objekts zurück, wenn es existiert, oder einen 404-Fehler, wenn dies nicht der Fall ist. Es ist wie GET-Objekt, aber ohne den Inhalt des Objekts.

Ich sah nur in der AWS SDK für Ruby API-Referenz und fand diese Methode:

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

einen Blick auf das Nehmen, es ist wahrscheinlich das, was Sie suchen.

+1

Vielen Dank für die Einsicht. Ich habe im Grunde versucht, PDF-Datei auf AWS S3-Bucket zu durchsuchen, und wenn es existiert, dann führen Sie weitere Aktionen darauf aus. ** existiert? ** Methode hat für mich funktioniert. Ich habe gerade den Dateipfad aws in eine Variable gestellt und dann die Methode exists aufgerufen. Dies gibt True zurück, wenn es ausgeführt wird. 'file =" Pfad/sample_100.pdf "' '@ bucket.objects (Datei) .existiert?' –

1

Ich würde Ihnen empfehlen, das viel einfachere S3 Juwel zu verwenden: https://github.com/qoobaa/s3 Wenn Sie nur mit S3 beschäftigen müssen. Sie werden in der Lage, es auf diese Weise zu tun:

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

+0

Danke @ CV-Gate für die alternative S3 gem. Ich werde es sicherlich versuchen. Aber die aktuelle Anwendung verwendet es bereits stark. –

Verwandte Themen