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
相关产品推荐
相关产品推荐

