簡體   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