web-dev-qa-db-fra.com

Trouvez l’extension d’un nom de fichier dans Ruby

Je travaille sur la partie de téléchargement de fichier d'une application Rails. Différents types de fichiers sont gérés différemment par l'application.

Je souhaite établir une liste blanche de certaines extensions de fichier pour vérifier les fichiers téléchargés et voir où ils doivent aller. Tous les noms de fichiers sont des chaînes.

J'ai besoin d'un moyen de vérifier uniquement la partie extension de la chaîne de nom de fichier. Les noms de fichiers sont tous au format "nom_du_fichier.some_extension".

96
Bryan Cosgrove

C'est des choses vraiment basiques:

irb(main):002:0> accepted_formats = [".txt", ".pdf"]
=> [".txt", ".pdf"]
irb(main):003:0> File.extname("example.pdf") # get the extension
=> ".pdf"
irb(main):004:0> accepted_formats.include? File.extname("example.pdf")
=> true
irb(main):005:0> accepted_formats.include? File.extname("example.txt")
=> true
irb(main):006:0> accepted_formats.include? File.extname("example.png")
=> false
156
Felix

Utilisez la méthode extname de la classe File

File.extname("test.rb")         #=> ".rb"

Aussi, vous aurez peut-être besoin de la méthode basename

File.basename("/home/gumby/work/Ruby.rb", ".rb")   #=> "Ruby"
75
megas

Sujet assez ancien mais voici le moyen de se débarrasser du point séparateur d'extension et des espaces de fin possibles:

File.extname(path).strip.downcase[1..-1]

Exemples:

File.extname(".test").strip.downcase[1..-1]       # => nil
File.extname(".test.").strip.downcase[1..-1]      # => nil
File.extname(".test.pdf").strip.downcase[1..-1]   # => "pdf"
File.extname(".test.pdf ").strip.downcase[1..-1]  # => "pdf"
15
gertas