繁体   English   中英

获取没有文件名的URL?

[英]Get URL without filename?

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

例如,我想要:

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

成为:

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

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

Ruby提供了一些可让您轻松到达那里的方法:

File.dirname(URL) # => "http://bucket.s3.amazonaws.com/directoryname/1234"

考虑一下URL / URI是什么:它是协议,站点和资源的目录路径的指示符。 资源的目录路径与“路径/到/文件”相同,因此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经过了充分的测试,并为此目的而设计。 它还将允许您轻松添加查询参数,并根据需要对其进行编码。

文档名称

"http://bucket.s3.amazonaws.com/directoryname/1234/thumbnail.jpg".match(/(.*\/)+(.*$)/)[2]
=> "thumbnail.jpg"

不带文件名的URL

"http://bucket.s3.amazonaws.com/directoryname/1234/thumbnail.jpg".match(/(.*\/)+(.*$)/)[1]
=> "http://bucket.s3.amazonaws.com/directoryname/1234/"

字串#match

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM