gin文件上传

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


gin文件上传

package main

import (
	"net/http"
	"path"

	"github.com/gin-gonic/gin"
)

func main() {
	router := gin.Default()

	router.LoadHTMLFiles("./index.html")
	router.GET("/index", func(c *gin.Context) {
		c.HTML(http.StatusOK, "index.html", nil)

	})
	// 处理multipart forms提交文件时默认的内存限制是32 MiB
	// 可以通过下面的方式修改
	// router.MaxMultipartMemory = 8 << 20  // 8 MiB
	router.POST("/upload", func(c *gin.Context) {
		// 单个文件
		//从请求中读取文件
		f, err := c.FormFile("f1")
		if err != nil {
			c.JSON(http.StatusInternalServerError, gin.H{
				"message": err.Error(),
			})
		} else {
			//将读取到的文件保存到本地(服务端本地)
			// dst := fmt.Sprintf("./%s",f.Filename)
			dst := path.Join("./", f.Filename)
			c.SaveUploadedFile(f, dst)
			c.JSON(http.StatusOK, gin.H{
				"status": "ok",
			})
		}
	})
	router.Run(":9090")
}

== path.Join 函数==
path.Join 函数是 Go 标准库 path 包中的一个函数,用于连接一个或多个路径组件,并返回一个由这些组件组成的路径字符串。这个函数会自动处理不同操作系统中的路径分隔符(在 Unix 系统中是 /,在 Windows 系统中是 \),因此它是跨平台的。

dst := path.Join("./", f.Filename)

这里,path.Join 接收两个参数:“./”(表示当前目录)和 f.Filename(表示上传文件的原始文件名)。函数将这两个组件连接在一起,并返回一个完整的路径字符串,例如如果 f.Filename 是 “example.txt”,那么 dst 将是 “./example.txt”。

== c.SaveUploadedFile 方法 ==
c.SaveUploadedFile 是 gin 框架中 Context 类型的一个方法,用于将上传的文件保存到指定的路径。这个方法接收两个参数:一个 *multipart.FileHeader 类型的参数(表示上传的文件),和一个字符串参数(表示要将文件保存到的路径)。

c.SaveUploadedFile(f, dst)

这里,f 是从 c.FormFile(“f1”) 返回的 *multipart.FileHeader 类型的变量,它包含了上传文件的信息。dst 是上面使用 path.Join 构建的文件保存路径。调用 c.SaveUploadedFile(f, dst) 将把上传的文件保存到 dst 指定的路径。

index.html

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <title>上传文件示例</title>
</head>

<body>
    <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="f1">
        <input type="submit" value="上传">
    </form>
</body>

</html>
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值