You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby/Rails使用URI解析URL:获取无前导斜杠路径及扩展名问题

解决URI解析中的路径和扩展名获取问题

嘿,我来帮你搞定这个URI解析的问题!针对你遇到的两个需求——获取无前导斜杠的路径和提取文件扩展名,咱们一步步来解决:

1. 获取无前导斜杠的路径

你已经用URI::parse拿到了正确的URI对象,uri.path返回的是带前导斜杠的路径,咱们只需要把开头的斜杠去掉就行。可以用字符串的sub方法匹配并替换掉开头的斜杠:

uri = URI.parse(Model.first.media)
# 去掉路径开头的斜杠
clean_path = uri.path.sub(/^\//, '')
# 此时 clean_path 的值就是 "model/media/41/cdbb21cc-1c59-4aa3-92ec-917e7237a850.mp4"

2. 获取文件扩展名

要提取扩展名,直接用File.extname方法处理URI的path属性就可以,它会自动识别并返回带点的扩展名;如果想要不带点的版本,再用delete('.')去掉即可:

# 获取带点的扩展名(比如 ".mp4")
extension = File.extname(uri.path)

# 获取不带点的扩展名(比如 "mp4")
extension_without_dot = File.extname(uri.path).delete('.')

为什么之前的File.basename用法没得到预期结果?

你直接传Model.first.media(完整URL)给File.basename,它会把整个URL当作文件路径处理,所以返回了完整的文件名。正确的做法应该是先从URI对象中提取path,再用File.basename处理:

# 正确获取文件名(不带路径)
filename = File.basename(uri.path)
# 结果是 "cdbb21cc-1c59-4aa3-92ec-917e7237a850.mp4"

# 如果想去掉扩展名,直接传扩展名参数给File.basename
filename_without_ext = File.basename(uri.path, '.mp4')
# 结果是 "cdbb21cc-1c59-4aa3-92ec-917e7237a850"

这样就能完美解决你遇到的问题啦!

内容的提问来源于stack exchange,提问作者Muhammad Rahmatullah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:50:30