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