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

Go Gin如何配置路由读取多段路径参数?

在Gin中配置支持多段路径的PUT路由

要实现你需要的多段路径解析,Gin的路由支持通配符参数来捕获可变长度的路径片段,具体可以通过:root匹配一级文件夹,再用*rest捕获剩余的所有路径部分,之后在处理函数里拆分出嵌套子文件夹和文件名。

具体实现步骤

  1. 配置通配符路由
    使用PUT /:root/*rest的路由规则,其中:

    • :root:匹配路径的第一段(即你的一级文件夹,比如示例中的cats)
    • *rest:匹配/之后的所有剩余路径(比如示例中的milady/first-year/32312.jpg)
  2. 在处理函数中拆分路径
    拿到rest参数后,需要把它拆分为嵌套子文件夹路径和文件名:

    • 先去除rest开头的斜杠(因为*rest捕获的内容会以/开头)
    • 使用path.Split拆分最后一段作为文件名,前面的部分就是嵌套子文件夹路径
  3. 按需创建嵌套文件夹
    使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:32:53