[英]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
可以很好地工作,而不必重新发明该特定的轮子。
尾部的/
不包含在内,因为它是路径段之间的分隔符。 通常,您不需要这样做,因为将资源连接到路径会自动提供资源。
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/"
'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.