在Ruby中查找文件名的扩展名

Bry*_*ove 97 ruby ruby-on-rails

我正在处理Rails应用程序的文件上传部分.应用程序以不同方式处理不同类型的文件.

我想制作某些文件扩展名的白名单来检查上传的文件,看看它们应该去哪里.所有文件名都是字符串.

我需要一种方法来只检查文件名字符串的扩展部分.文件名的格式均为"some_file_name.some_extension".

Fel*_*lix 157

这是非常基本的东西:

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
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这对多周期后缀不起作用,例如`tar.gz`,`tar.bz2`. (11认同)
  • 怎么样``file_with_no_extension'.split('.').last`? (4认同)
  • 您可能希望执行`File.extname("example.png").downcase`以确保扩展名不是全部大写 (4认同)
  • @KomodoDave对于扩展名的启发式(因此容易出错)数据库,不适用于多期间后缀。 (2认同)

meg*_*gas 76

使用extnameFile类中的方法

File.extname("test.rb")         #=> ".rb"
Run Code Online (Sandbox Code Playgroud)

你也可能需要basename方法

File.basename("/home/gumby/work/ruby.rb", ".rb")   #=> "ruby"
Run Code Online (Sandbox Code Playgroud)


ger*_*tas 15

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

File.extname(path).strip.downcase[1..-1]
Run Code Online (Sandbox Code Playgroud)

例子:

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"
Run Code Online (Sandbox Code Playgroud)


小智 7

我认为这样做会更容易摆脱扩展分隔符。

File.extname(path).delete('.')
Run Code Online (Sandbox Code Playgroud)