脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - golang Gin上传文件返回前端及中间件实现示例

golang Gin上传文件返回前端及中间件实现示例

2022-09-19 16:51Jeff的技术栈 Golang

这篇文章主要为大家介绍了golang Gin上传文件返回前端及中间件实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

上传文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main
import (
    "fmt"
    "github.com/gin-gonic/gin"
)
func main() {
    router := gin.Default()
    // 给表单限制上传大小 (默认 32 MiB)
    // router.MaxMultipartMemory = 8 << 20  // 8 MiB
    router.POST("/upload", func(c *gin.Context) {
        // 单文件
        file, _ := c.FormFile("file")
        // 上传文件到指定的路径
        c.SaveUploadedFile(file, "./"+file.Filename)
 
        //c.String(http.StatusOK, fmt.Sprintf("'%s' uploaded!", file.Filename))
        c.Writer.Header().Add("Content-Disposition",fmt.Sprintf("attachment;filename=%s",file.Filename))
        c.File("./"+file.Filename)
    })
    router.Run(":8080")
}

文件返回给前端

?
1
2
c.Writer.Header().Add("Content-Disposition",fmt.Sprintf("attachment;filename=%s",file.Filename))
c.File("./"+file.Filename)  //返回文件路径,自动调用http.ServeFile方法

中间件

中间件调用两种方式

方式一:在Use中连续调用

v1 := r.Group("v1").Use(middel())
v1 := r.Group("v1").Use(middel(),middel2())

方式二:Use链式调用

v1 := r.Group("v1").Use(middel()).Use(middel2())

单个中间件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main
import (
    "fmt"
    "github.com/gin-gonic/gin"
)
func middel()gin.HandlerFunc{
    return func(context *gin.Context) {
        fmt.Println("我在方法前1")
        context.Next()
        fmt.Println("我在方法后1")
    }
}
func main() {
    r := gin.Default()
    v1 := r.Group("v1").Use(middel())
    v1.GET("/test", func(c *gin.Context) {
        fmt.Println("我在方法内部")
        c.JSON(200, gin.H{
            "msg": true,
        })
    })
    r.Run(":8080")
}

结果 

我在方法前1
我在方法内部
我在方法后1

多个中间件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package main
import (
    "fmt"
    "github.com/gin-gonic/gin"
)
func middel()gin.HandlerFunc{
    return func(context *gin.Context) {
        fmt.Println("我在方法前1")
        context.Next()
        fmt.Println("我在方法后1")
    }
}
func middel2()gin.HandlerFunc{
    return func(context *gin.Context) {
        fmt.Println("我在方法前2")
        context.Next()
        fmt.Println("我在方法后2")
    }
}
func main() {
    r := gin.Default()
    v1 := r.Group("v1").Use(middel(),middel2())
    v1.GET("/test", func(c *gin.Context) {
        fmt.Println("我在方法内部")
        c.JSON(200, gin.H{
            "msg": true,
        })
    })
    r.Run(":8080")
}
//像一个洋葱

结果

我在方法前1
我在方法前2
我在方法内部
我在方法后2
我在方法后1

以上就是golang Gin上传文件返回前端及中间件实现示例的详细内容,更多关于golang Gin上传文件返回前端中间件的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/guyouyin123/p/14109053.html

延伸 · 阅读

精彩推荐
  • GolangGo使用defer函数要注意的几个点

    Go使用defer函数要注意的几个点

    这篇文章主要介绍了Go使用defer函数要注意的几个点,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    訢亮4542020-06-01
  • Golang详解Golang如何优雅的终止一个服务

    详解Golang如何优雅的终止一个服务

    后端服务通常会需要创建子协程来进行相应的作业,但进程接受到终止信号或正常结束时,并没有判断或等待子协程执行结束,下面这篇文章主要给大家介绍了...

    磊磊落落爱分享5962022-09-08
  • GolangGo语言基础switch条件语句基本用法及示例详解

    Go语言基础switch条件语句基本用法及示例详解

    这篇文章主要为大家介绍了Go语言基础switch条件语句基本用法及示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步...

    枫少文7872021-12-07
  • GolangGo语言中使用flag包对命令行进行参数解析的方法

    Go语言中使用flag包对命令行进行参数解析的方法

    这篇文章主要介绍了Go语言中使用flag包对命令行进行参数解析的方法,文中举了一个实现flag.Value接口来自定义flag的例子,需要的朋友可以参考下 ...

    leanote6142020-04-29
  • GolangGo语言基础模板设计模式示例详解

    Go语言基础模板设计模式示例详解

    这篇文章主要为大家介绍了Go语言基础设计模式之模板模式的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步...

    package main8372021-12-06
  • GolangGolang中切片的用法与本质详解

    Golang中切片的用法与本质详解

    Go的切片类型为处理同类型数据序列提供一个方便而高效的方式,下面这篇文章就来给大家介绍了关于Golang中切片的用法与本质的相关资料,文中通过示例...

    hgqxjj5232020-05-17
  • GolangGolang编程实现删除字符串中出现次数最少字符的方法

    Golang编程实现删除字符串中出现次数最少字符的方法

    这篇文章主要介绍了Golang编程实现删除字符串中出现次数最少字符的方法,涉及Go语言字符串遍历与运算相关操作技巧,需要的朋友可以参考下 ...

    books19582302020-05-04
  • GolangGo语言实现的web爬虫实例

    Go语言实现的web爬虫实例

    这篇文章主要介绍了Go语言实现的web爬虫,实例分析了web爬虫的原理与Go语言的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下 ...

    Go语言编程实例3782020-04-18