golang?Gin上傳文件返回前端及中間件實(shí)現(xiàn)示例
上傳文件
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
// 給表單限制上傳大小 (默認(rèn) 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")
}
文件返回給前端
c.Writer.Header().Add("Content-Disposition",fmt.Sprintf("attachment;filename=%s",file.Filename))
c.File("./"+file.Filename) //返回文件路徑,自動(dòng)調(diào)用http.ServeFile方法
中間件
中間件調(diào)用兩種方式
方式一:在Use中連續(xù)調(diào)用
v1 := r.Group("v1").Use(middel())
v1 := r.Group("v1").Use(middel(),middel2())
方式二:Use鏈?zhǔn)秸{(diào)用
v1 := r.Group("v1").Use(middel()).Use(middel2())
單個(gè)中間件
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("我在方法內(nèi)部")
c.JSON(200, gin.H{
"msg": true,
})
})
r.Run(":8080")
}
結(jié)果
我在方法前1
我在方法內(nèi)部
我在方法后1
多個(gè)中間件
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("我在方法內(nèi)部")
c.JSON(200, gin.H{
"msg": true,
})
})
r.Run(":8080")
}
//像一個(gè)洋蔥
結(jié)果
我在方法前1
我在方法前2
我在方法內(nèi)部
我在方法后2
我在方法后1
以上就是golang Gin上傳文件返回前端及中間件實(shí)現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于golang Gin上傳文件返回前端中間件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語(yǔ)言學(xué)習(xí)之循環(huán)語(yǔ)句使用詳解
這篇文章主要為大家介紹了Go語(yǔ)言中的常用循環(huán)語(yǔ)句的使用,例如:for循環(huán)、for-each、break等,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-04-04
Go語(yǔ)言實(shí)戰(zhàn)之實(shí)現(xiàn)一個(gè)簡(jiǎn)單分布式系統(tǒng)
如今很多云原生系統(tǒng)、分布式系統(tǒng),例如?Kubernetes,都是用?Go?語(yǔ)言寫(xiě)的,這是因?yàn)?Go?語(yǔ)言天然支持異步編程。本篇文章將介紹如何用?Go?語(yǔ)言編寫(xiě)一個(gè)簡(jiǎn)單的分布式系統(tǒng),需要的小伙伴開(kāi)業(yè)跟隨小編一起學(xué)習(xí)一下2022-10-10
go語(yǔ)言對(duì)文件按照指定塊大小進(jìn)行分割的方法
這篇文章主要介紹了go語(yǔ)言對(duì)文件按照指定塊大小進(jìn)行分割的方法,實(shí)例分析了Go語(yǔ)言文件操作的技巧,需要的朋友可以參考下2015-03-03
Go并發(fā)的方法之goroutine模型與調(diào)度策略
在go中,協(xié)程co-routine被改為goroutine,一個(gè)goroutine只占幾kb,因此可以有大量的goroutine存在,另一方面goroutine 的調(diào)度器非常靈活,本文給大家介紹下Go并發(fā)的方法之goroutine模型與調(diào)度策略,感興趣的朋友一起看看吧2021-11-11
Go可變參數(shù)函數(shù)的實(shí)現(xiàn)
可變參數(shù)函數(shù)是指函數(shù)參數(shù)的某個(gè)參數(shù)可有可無(wú),即這個(gè)參數(shù)的個(gè)數(shù)可以為0會(huì)多個(gè),可變參數(shù)函數(shù)參數(shù)在日常編程中大量使用,本文主要介紹了Go可變參數(shù)函數(shù)的實(shí)現(xiàn),感興趣的可以了解一下2023-12-12
Golang協(xié)程常見(jiàn)面試題小結(jié)
本文主要介紹了Golang協(xié)程常見(jiàn)面試題小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02

