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".
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
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"
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"