如何在没有url链接的情况下返回文件路径?

时间:2011-09-12 18:43:07

标签: ruby ruby-on-rails-3

我有

http://foobar.s3.amazonaws.com/uploads/users/15/photos/12/foo.jpg

如何返回

uploads/users/15/photos/12/foo.jpg

5 个答案:

答案 0 :(得分:3)

最好使用属于Ruby标准库的URI parsing 而不是尝试一些可能会或可能不会采取每一个的正则表达式 可能的特殊情况。

require 'uri'

url = "http://foo.s3.amazonaws.com/uploads/users/15/photos/12/foo.jpg"

path = URI.parse(url).path  
# => "/uploads/users/15/photos/12/foo.jpg"

path[1..-1]
# => "uploads/users/15/photos/12/foo.jpg"

无需重新发明轮子。

答案 1 :(得分:2)

"http://foobar.s3.amazonaws.com/uploads/users/15/photos/12/foo.jpg".sub("http://foobar.s3.amazonaws.com/","")

将是一个显式版本,其中sub用空字符串构成主页部分。

对于更普遍的方法,我会推荐一个正则表达式,类似于这个:

string = "http://foobar.s3.amazonaws.com/uploads/users/15/photos/12/foo.jpg"
string.sub(/(http:\/\/)*.*?\.\w{2,3}\//,"")

如果需要,我可以解释正则表达式。

答案 2 :(得分:0)

便宜的答案是在第一张单/之前删除所有内容。

更好的答案是“How do I process a URL in ruby to extract the component parts (scheme, username, password, host, etc)?”和“Remove subdomain from string in ruby”。

答案 3 :(得分:0)

link = "http://foobar.s3.amazonaws.com/uploads/users/15/photos/12/foo.jpg"
path = link.match /\/\/[^\/]*\/(.*)/
path[1]
#=> "uploads/users/15/photos/12/foo.jpg"

答案 4 :(得分:0)

有人也推荐这种方法:

URI.parse(URI.escape('http://foobar.s3.amazonaws.com/uploads/users/15/photos/12/foo.jpg')).path[1..-1]

使用类似这样的东西和正则表达式方法有什么缺点吗?