Найти расширение имени файла в Ruby
Я работаю над частью загрузки файла приложения Rails. Различные типы файлов обрабатываются по-разному приложением.
Я хочу сделать белый список определенных расширений файлов, чтобы проверить загруженные файлы, чтобы посмотреть, куда они должны идти. Все имена файлов - это строки.
Мне нужен способ проверить только часть расширения строки имени файла. Имена файлов все находятся в формате "some_file_name.some_extension".
Ответы
Ответ 1
Это действительно основной материал:
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
Ответ 2
Использовать метод extname
из класса File
File.extname("test.rb") #=> ".rb"
Также вам может понадобиться basename
метод
File.basename("/home/gumby/work/ruby.rb", ".rb") #=> "ruby"
Ответ 3
Довольно старая тема, но вот способ избавиться от точки разделителя расширений и возможных конечных пробелов:
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"