Go Gin如何配置路由读取多段路径参数?
在Gin中配置支持多段路径的PUT路由
要实现你需要的多段路径解析,Gin的路由支持通配符参数来捕获可变长度的路径片段,具体可以通过:root匹配一级文件夹,再用*rest捕获剩余的所有路径部分,之后在处理函数里拆分出嵌套子文件夹和文件名。
具体实现步骤
配置通配符路由
使用PUT /:root/*rest的路由规则,其中::root:匹配路径的第一段(即你的一级文件夹,比如示例中的cats)*rest:匹配/之后的所有剩余路径(比如示例中的milady/first-year/32312.jpg)
在处理函数中拆分路径
拿到rest参数后,需要把它拆分为嵌套子文件夹路径和文件名:- 先去除
rest开头的斜杠(因为*rest捕获的内容会以/开头) - 使用
path.Split拆分最后一段作为文件名,前面的部分就是嵌套子文件夹路径
- 先去除
按需创建嵌套文件夹
使用os.MkdirAll函数自动创建所有不存在的嵌套子文件夹,无需手动逐层创建。
完整示例代码
package main import ( "net/http" "os" "path" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() // 配置PUT路由,支持多段路径 r.PUT("/:root/*rest", func(c *gin.Context) { // 获取一级文件夹 rootFolder := c.Param("root") // 获取剩余路径,去除开头的斜杠 restPath := c.Param("rest")[1:] // 去掉开头的 "/" // 拆分嵌套子文件夹和文件名 subFolder, fileName := path.Split(restPath) // 如果fileName为空,说明请求未指定文件名 if fileName == "" { c.JSON(http.StatusBadRequest, gin.H{"error": "缺少文件名"}) return } // 拼接完整的文件夹路径:rootFolder/subFolder fullFolderPath := path.Join(rootFolder, subFolder) // 创建所有不存在的嵌套文件夹,权限设为0755 err := os.MkdirAll(fullFolderPath, 0755) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "创建文件夹失败: " + err.Error()}) return } // 此处可添加文件处理逻辑(如读取请求体写入文件) c.JSON(http.StatusOK, gin.H{ "root_folder": rootFolder, "sub_folder": subFolder, "file_name": fileName, "created_folder": fullFolderPath, }) }) r.Run(":8080") }
测试示例
当发送PUT /cats/milady/first-year/32312.jpg请求时,处理函数会:
- 提取
root_folder为cats - 提取
sub_folder为milady/first-year/(若需去除末尾斜杠,可使用strings.TrimSuffix(subFolder, "/")) - 提取
file_name为32312.jpg - 自动创建
cats/milady/first-year路径(如果不存在)
额外说明
- 如果需要支持纯文件夹创建请求(如
PUT /cats/milady/first-year),可调整逻辑:当fileName为空时,将subFolder作为最终文件夹路径执行创建。 - 使用
path包处理路径,可保证跨平台兼容性(自动适配Windows和Unix路径分隔符)。
内容的提问来源于stack exchange,提问作者realtebo
相关产品推荐
相关产品推荐

