【问题标题】:Ruby/Rails : Get url extension with URIRuby/Rails:使用 URI 获取 url 扩展名
【发布时间】:2018-03-20 02:55:12
【问题描述】:

目前我在使用 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"

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

我必须使用正则表达式来获得以上输出吗?或者 URI 可以处理这个?

注意:

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

【问题讨论】:

    标签: ruby-on-rails ruby url uri


    【解决方案1】:

    URI 类有助于将 URL 分解为组件并为您提供类似的方法

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

    如果您只是需要去掉第一个斜线,那么就很简单,不需要正则表达式。

    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 /
    

    【讨论】:

    • 您好,非常感谢您的帮助先生 :)。但是可能会问你,哪个更好?。
    • 最佳实践是只使用你需要的东西。如果只需要对字符串进行操作,请使用最后一个选项。如果您需要对 URI 对象执行其他操作,请使用一个。
    • 还有我的另一个问题,你也能帮忙吗?目前我已经试过这个代码File.dirname(uri) + "/" + File.basename(Model.first.media, '.mp4') + ".m3u8"来改变我数据库中记录的格式文件,例如以前我的文件是play/media/41/my_video.mp4 ,然后我想把它改成.m3u8所以我使用上面的代码
    • 如果您只是想更改扩展名,同样,只需使用基本的字符串方法:"play/media/41/my_video.mp4".gsub('.mp4', '.m3u8') 但假设.mp4 只是扩展名,而不是字符串中的任何其他位置。如果文件名使用正常的约定应该没问题。
    • 非常感谢先生,这对我很有帮助:)。但我能再问一个问题吗?如何获取没有文件扩展名、主域和“/”作为第一个字符的 url。 url = my-bucket.s3.amazonaws.com/model/media/41/… expected_url = model/media/41/cdbb21cc-1c59-4aa3-92ec-917e7237a850 目前我正在使用这个File.dirname(uri) + "/" + File.basename(Model.first.media, '.mp4') 来获取expected_url
    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 2018-06-18
    相关资源
    最近更新 更多