获取没有文件名的URL?

时间:2013-12-28 03:26:44

标签: ruby-on-rails ruby ruby-on-rails-3

我正在试图找出如何解析Rails中的URL,并返回除文件名之外的所有内容,或者除了最后一个反斜杠之外的所有内容。

例如,我想:

http://bucket.s3.amazonaws.com/directoryname/1234/thumbnail.jpg

成为:

http://bucket.s3.amazonaws.com/directoryname/1234/

我找到了解析URI的所有方法,但是这个。任何帮助将不胜感激。

3 个答案:

答案 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/"

String#match

答案 2 :(得分:0)

'http://a.b.pl/a/b/c/d.jpg'.rpartition('/').first
=> "http://a.b.pl/a/b/c"