代码之家  ›  专栏  ›  技术社区  ›  Muhammad Rahmatullah

Ruby/Rails:使用URI获取url扩展

  •  1
  • Muhammad Rahmatullah  · 技术社区  · 8 年前

    目前,我在使用URI解析URL时遇到了一些问题

    我尝试使用以下代码:

    uri = URI::parse(Model.first.media)
    #<URI::HTTPS https://my-bucket.s3.amazonaws.com/model/media/41/cdbb21cc-1c59-4aa3-92ec-917e7237a850.mp4>
    
    uri.path
    "/model/media/41/cdbb21cc-1c59-4aa3-92ec-917e7237a850.mp4"
    
    File.basename(Model.first.media, '.mp4')
    "cdbb21cc-1c59-4aa3-92ec-917e7237a850.mp4"
    

    但我还是很困惑 path 没有 / 作为示例中的第一个字符 model/media/41/cdbb21cc-1c59-4aa3-92ec-917e7237a850.mp4 并仅获取没有域的路径和示例中的文件 model/media/41

    我必须使用regex才能获得以上输出吗?或者URI可以处理这个问题?

    注:

    基于这个问题,我找到了如何在没有第一个字符的情况下获取url扩展名 Ruby regexp: capture the path of url

    1 回复  |  直到 8 年前
        1
  •  1
  •   lacostenycoder    8 年前

    URI类帮助将URL分解为组件,并提供如下方法

    [:scheme, :userinfo, :host, :port, :path, :query, :fragment]
    

    如果您只是需要去掉第一个斜杠,那么就这么简单,没有regex。

    uri.path[1..-1] #gives all string characters except the 0 index.
    

    但你甚至可能逃脱:

    Model.first.media.split('.com/').last # don't even need URI parse.
    

    对于问题的最后一部分,您可以执行以下操作:

    File.dirname(uri.path) # will return => "/model/media/41"
    
    File.dirname(uri.path)[1..-1] # if you want to remove leading /
    
    推荐文章