我正在处理Rails应用的文件上传部分。应用程序以不同方式处理不同类型的文件。
我想制作某些文件扩展名的白名单来检查上传的文件,看看它们应该去哪里。所有文件名都是字符串。
我需要一种方法来只检查文件名字符串的扩展部分。文件名的格式均为" some_file_name.some_extension"。
答案 0 :(得分:150)
这是非常基本的东西:
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
答案 1 :(得分:73)
使用File class
中的extname
方法
File.extname("test.rb") #=> ".rb"
此外,您可能需要basename
方法
File.basename("/home/gumby/work/ruby.rb", ".rb") #=> "ruby"
答案 2 :(得分:15)
相当古老的话题,但这里是摆脱扩展分隔符点和可能的尾随空格的方法:
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"
答案 3 :(得分:1)
我认为这样做可以更方便地使用扩展分隔符。
File.extname(path).delete('.')