我正在试图找出如何解析Rails中的URL,并返回除文件名之外的所有内容,或者除了最后一个反斜杠之外的所有内容。
例如,我想:
http://bucket.s3.amazonaws.com/directoryname/1234/thumbnail.jpg
成为:
http://bucket.s3.amazonaws.com/directoryname/1234/
我找到了解析URI的所有方法,但是这个。任何帮助将不胜感激。
答案 0 :(得分:11)
Ruby有一些方法可以让你轻松到达目的地:
File.dirname(URL) # => "http://bucket.s3.amazonaws.com/directoryname/1234"
考虑URL / URI是什么:它是协议,站点和资源的目录路径的指示符。资源的目录路径与“path / to / file”相同,因此File.dirname
可以很好地工作,而不必重新发明特定的轮子。
不包括尾随/
,因为它是路径段之间的分隔符。您通常不需要这样做,因为将资源加入路径会自动提供它。
实际上,使用Ruby的URI类是修改URI的正确方法:
require 'uri'
URL = 'http://bucket.s3.amazonaws.com/directoryname/1234/thumbnail.jpg'
uri = URI.parse(URL)
uri.merge('foo.html').to_s
# => "http://bucket.s3.amazonaws.com/directoryname/1234/foo.html"
URI也可以让你轻松搞乱路径:
uri.merge('../foo.html').to_s
# => "http://bucket.s3.amazonaws.com/directoryname/foo.html"
uri.merge('../bar/foo.html').to_s
# => "http://bucket.s3.amazonaws.com/directoryname/bar/foo.html"
URI经过了充分测试,专为此目的而设计。它还允许您轻松添加查询参数,并根据需要对其进行编码。
答案 1 :(得分:1)
档案名称
"http://bucket.s3.amazonaws.com/directoryname/1234/thumbnail.jpg".match(/(.*\/)+(.*$)/)[2]
=> "thumbnail.jpg"
没有文件名的网址
"http://bucket.s3.amazonaws.com/directoryname/1234/thumbnail.jpg".match(/(.*\/)+(.*$)/)[1]
=> "http://bucket.s3.amazonaws.com/directoryname/1234/"
答案 2 :(得分:0)
'http://a.b.pl/a/b/c/d.jpg'.rpartition('/').first
=> "http://a.b.pl/a/b/c"