Подтвердить что ты не робот

Как получить расширение файла из URL-адреса?

Новый для ruby, как бы получить расширение файла из URL-адреса, например:

http://www.example.com/asdf123.gif

Также, как бы я отформатировал эту строку, в С# я бы сделал:

string.format("http://www.example.com/{0}.{1}", filename, extension);
4b9b3361

Ответ 1

Используйте File.extname

File.extname("test.rb")         #=> ".rb"
File.extname("a/b/d/test.rb")   #=> ".rb"
File.extname("test")            #=> ""
File.extname(".profile")        #=> ""

Чтобы форматировать строку

"http://www.example.com/%s.%s" % [filename, extension]

Ответ 2

Это работает для файлов с строкой запроса

file = 'http://recyclewearfashion.com/stylesheets/page_css/page_css_4f308c6b1c83bb62e600001d.css?1343074150'
File.extname(URI.parse(file).path) # => '.css'

также возвращает "", если файл не имеет расширения

Ответ 3

url = 'http://www.example.com/asdf123.gif'
extension = url.split('.').last

Вы получите расширение для URL-адреса (самым простым способом). Теперь для форматирования вывода:

printf "http://www.example.com/%s.%s", filename, extension

Ответ 4

Вы можете использовать Ruby URI class, чтобы получить фрагмент URI (то есть относительный путь к файлу) и разбить его на последнее вхождение точки (это также будет работать, если URL-адрес содержит часть запроса):

require 'uri'
your_url = 'http://www.example.com/asdf123.gif'
fragment = URI.split(your_url)[5]

extension = fragment.match(/\.([\w+-]+)$/)

Ответ 5

Я понимаю, что это древний вопрос, но здесь еще одно голосование за использование Addressable. Вы можете использовать метод .extname, который работает по желанию даже с строкой запроса:

 Addressable::URI.parse('http://www.example.com/asdf123.gif').extname # => ".gif"
 Addressable::URI.parse('http://www.example.com/asdf123.gif?foo').extname # => ".gif"