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

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

Je veux faire une liste blanche de certaines extensions de fichiers pour vérifier les fichiers téléchargés pour 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 “some_file_name.some_extension”.

C’est vraiment des choses 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 

Utiliser la méthode extname de la classe File

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

Vous pouvez aussi avoir besoin de la méthode de nom de base

 File.basename("/home/gumby/work/ruby.rb", ".rb") #=> "ruby" 

Sujet assez ancien mais voici le moyen de se débarrasser des points de séparation d’extension et des éventuels espaces de fin:

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

Exemples:

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