Ruby on Rails: Wie wollen Sie überprüfen, ob eine Datei ein Bild ist?
Wie würden Sie überprüfen, ob eine Datei ein Bild ist? Ich denke man könnte eine Methode wie folgt:
def image?(file)
file.to_s.include?(".gif") or file.to_s.include?(".png") or file.to_s.include?(".jpg")
end
Aber das wäre ein wenig ineffizient und nicht korrekt. Irgendwelche Ideen?
(Ich bin mit der Büroklammer plugin, btw, aber ich sehe keine Methoden, um zu bestimmen, ob eine Datei ein Bild in Büroklammer)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde das ruby-filemagic Juwel, das ist ein Ruby-binding für libmagic.
Ein Ansatz ist es, die "Magische Zahl" Konvention zum Lesen des ersten bits einer Datei.
http://www.astro.keele.ac.uk/oldusers/rno/Computing/File_magic.html
Beispiele:
Beispiel in Ruby:
Warum verwenden Sie diese anstelle der Datei-Namen-Erweiterung oder die filemagic Modul?
Zu erkennen, die Daten geben, bevor das schreiben von Daten auf die Festplatte. Zum Beispiel können wir Lesen-upload-Datenstrom, bevor wir schreiben alle Daten auf der Festplatte. Wenn die magic number nicht mit dem web-Formular-Inhalten geben, dann können wir sofort einen Fehler melden.
Setzen wir real-world-code etwas anders. Wir erstellen einen hash: jede Taste ist eine Magische Zahl string, jeder Wert ist ein symbol wie :bitmap, gif, jpeg, etc. Wenn jemand möchte, um zu sehen, real-world-code, fühlen Sie sich frei, mich hier zu Kontaktieren.
jpeg?
wärereturn data[0,3].bytes == [255, 216, 255]
Bitte überprüfen Sie es einmal
Rails 4.2.x.x
auchDa bist du mit einer Büroklammer, Sie können mit dem eingebauten "validates_attachment_content_type" - Methode in das Modell, wo "has_attached_file" verwendet wird, und angeben, welche Dateitypen Sie zulassen möchten.
Hier ist ein Beispiel aus einer Anwendung, bei der Benutzer einen avatar hochladen, der für Ihr Profil:
Die Dokumentation ist hier http://dev.thoughtbot.com/paperclip/classes/Paperclip/ClassMethods.html
imagemagick hat einen Befehl namens Identität, behandelt diese - überprüfen Sie w/die Büroklammer-Dokumentation - es ist wahrscheinlich eine Art das zu handhaben, aus Ihrem RoR app.
Als Ergänzung zu Joels Antwort, in Schienen 5 hatte ich zum transformieren der Vergleich-string in einen bytecode.
Eg: