Как получить расширение файла из URL? - PullRequest
34 голосов
/ 06 ноября 2010

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

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

Кроме того, как бы я отформатировал эту строку, в C # я бы сделал:

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

Ответы [ 5 ]

66 голосов
/ 06 ноября 2010

Использовать 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]
26 голосов
/ 24 июля 2012

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

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

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

6 голосов
/ 06 ноября 2010
url = 'http://www.example.com/asdf123.gif'
extension = url.split('.').last

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

printf "http://www.example.com/%s.%s", filename, extension
2 голосов
/ 06 ноября 2010

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

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

extension = fragment.match(/\.([\w+-]+)$/)
1 голос
/ 22 августа 2017

Я понимаю, что это древний вопрос, но вот еще один голос за использование 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...