在Ruby中find文件名的扩展名

我正在研究Rails应用程序的file upload部分。 应用程序对不同types的文件进行不同的处理。

我想制作某些文件扩展名的白名单来检查上传的文件,看看他们应该去哪里。 所有的文件名都是string。

我需要一种方法来检查只有文件名string的扩展部分。 文件名都是“some_file_name.some_extension”的格式。

这是非常基本的东西:

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 

使用File类中的extname方法

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

你也可能需要basename方法

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

相当老的话题,但这里是摆脱扩展分隔符点和可能的尾随空格的方式:

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

例子:

 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"