我正在研究Rails应用程序的文件上传部分。应用程序对不同类型的文件的处理方式不同。
我想将某些文件扩展名列入白名单,以检查上载的文件以查看它们应该去的位置。所有文件名都是字符串。
我需要一种方法来仅检查文件名字符串的扩展名部分。文件名均采用“ some_file_name.some_extension”的格式。
我正在研究Rails应用程序的文件上传部分。应用程序对不同类型的文件的处理方式不同。
我想将某些文件扩展名列入白名单,以检查上载的文件以查看它们应该去的位置。所有文件名都是字符串。
我需要一种方法来仅检查文件名字符串的扩展名部分。文件名均采用“ some_file_name.some_extension”的格式。
Answers:
这真的是最基本的东西:
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
tar.gz
,)无效tar.bz2
。
File.extname("example.png").downcase
确保扩展名不大写
很老的话题,但是这是摆脱扩展分隔符点和可能的尾随空格的方法:
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"
"file_with_no_extension".split('.').last
样