中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang GinWeb框架之文件上傳/程序panic崩潰后自定義處理方式是什么

發布時間:2021-10-23 16:23:59 來源:億速云 閱讀:304 作者:iii 欄目:web開發

這篇文章主要講解了“Golang GinWeb框架之文件上傳/程序panic崩潰后自定義處理方式是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Golang GinWeb框架之文件上傳/程序panic崩潰后自定義處理方式是什么”吧!

上傳文件

單文件上傳

注意: 文件名必須是安全可信賴的, 需要去掉路徑信息,保留文件名即可

package main  import (   "fmt"   "github.com/gin-gonic/gin"   "log"   "net/http"   "os" )  func main() {   router := gin.Default()   // Set a lower memory limit for multipart forms (default is 32 MiB)   // 設置請求表單最大內存限制,默認是30MB    //內部調用http請求的ParseMultipartForm方法,該方法要求傳入一個字節數, 要取MultipartForm字段的數據,先使用ParseMultipartForm()方法解析Form,解析時會讀取所有數據,但需要指定保存在內存中的最大字節數,剩余的字節數會保存在臨時磁盤文件中   maxMultipartMemory := int64(8 << 20)   log.Printf("解析文件到內存的最大字節:%d", maxMultipartMemory)   router.MaxMultipartMemory = maxMultipartMemory  // 8 MiB   router.POST("/upload", func(c *gin.Context) {     // single file     file, _ := c.FormFile("file")  //FormFile從表單中返回第一個匹配到的文件對象(結構)     log.Printf("獲取到的文件名:%s", file.Filename)  //文件名必須是安全可信耐的,需要去掉路徑信息,保留文件名即可      // Upload the file to specific dst.     currentPath, _ := os.Getwd()  //獲取當前文件路徑     dst := currentPath + "/" + file.Filename     log.Printf("保存文件絕對路徑:%s", dst)     c.SaveUploadedFile(file, dst)      c.String(http.StatusOK, fmt.Sprintf("'%s' uploaded!", file.Filename))   })   router.Run(":8080") }  //模擬單文件上傳: //curl -X POST http://localhost:8080/upload  -H "Content-Type: multipart/form-data" -F "file=@文件名"

多文件上傳,  詳情參考(https://github.com/gin-gonic/examples/blob/master/upload-file/multiple/main.go)

package main  import (   "fmt"   "github.com/gin-gonic/gin"   "log"   "net/http"   "os" )  func main() {   router := gin.Default()   // Set a lower memory limit for multipart forms (default is 32 MiB)   // 設置請求表單最大內存限制,默認是30MB   //內部調用http請求的ParseMultipartForm方法,該方法要求傳入一個字節數, 要取MultipartForm字段的數據,先使用ParseMultipartForm()方法解析Form,解析時會讀取所有數據,但需要指定保存在內存中的最大字節數,剩余的字節數會保存在臨時磁盤文件中   maxMultipartMemory := int64(8 << 20)   log.Printf("解析文件到內存的最大字節:%d", maxMultipartMemory)   router.MaxMultipartMemory = maxMultipartMemory  // 8 MiB   router.POST("/upload", func(c *gin.Context) {     // Upload the file to specific dst.     currentPath, _ := os.Getwd()  //獲取當前文件路徑     // Multipart form     form, _ := c.MultipartForm() //多文件表單     files := form.File["upload[]"] //通過前端提供的鍵名獲取文件數組     for _, file := range files {       dst := currentPath + "/" + file.Filename       log.Printf("保存文件絕對路徑:%s", dst)       // Upload the file to specific dst.       c.SaveUploadedFile(file, dst)     }     c.String(http.StatusOK, fmt.Sprintf("%d files uploaded!", len(files)))   })   router.Run(":8080") }  //模擬多文件上傳 //curl -X POST http://localhost:8080/upload -H "Content-Type: multipart/form-data" -F "upload[]=@文件1" -F "upload[]=@文件2"

路由分組

路由分組可用于新老接口兼容, 針對不同分組的路由使用不同的中間件處理邏輯等

func main() {   router := gin.Default()   // Simple group: v1  路由分組1   v1 := router.Group("/v1")   {     v1.POST("/login", loginEndpoint)     v1.POST("/submit", submitEndpoint)     v1.POST("/read", readEndpoint)   }   // Simple group: v2  路由分組2   v2 := router.Group("/v2")   {     v2.POST("/login", loginEndpoint)     v2.POST("/submit", submitEndpoint)     v2.POST("/read", readEndpoint)   }   router.Run(":8080") }

中間件

我們可以用下面的兩種方式初始化Gin引擎

r := gin.New() //得到一個不使用任何中間件的Gin引擎Engine對象r  // Default With the Logger and Recovery middleware already attached // 默認方法使用Logger(日志記錄器)和Recovery(異常自恢復)中間件 r := gin.Default()

自定義程序崩潰后的處理方式(郵件,微信,短信等告警)

package main  import (   "fmt"   "github.com/gin-gonic/gin"   "log"   "net/http" )  func CustomRecovery() gin.HandlerFunc {   return func(c *gin.Context) {     defer func() {       //if r := recover(); r != nil {       //  log.Printf("崩潰信息:%s", r)       //}        if err, ok := recover().(string); ok {         log.Printf("您可以在這里完成告警任務,郵件,微信等告警")         c.String(http.StatusInternalServerError, fmt.Sprintf("error: %s", err))       }       c.AbortWithStatus(http.StatusInternalServerError)     }()     c.Next()   } }  func main() {   // Creates a router without any middleware by default   r := gin.New()    // Global middleware   // Logger middleware will write the logs to gin.DefaultWriter even if you set with GIN_MODE=release.   // By default gin.DefaultWriter = os.Stdout   r.Use(gin.Logger())    // Recovery middleware recovers from any panics and writes a 500 if there was one.   //r.Use(CustomRecovery())  //使用自定義中間件處理程序崩潰    //使用匿名函數組成中間件,處理程序崩潰   r.Use(func( c *gin.Context){     defer func() {       if err, ok := recover().(string); ok {         log.Printf("您可以在這里完成告警任務,郵件,微信等告警")         c.String(http.StatusInternalServerError, fmt.Sprintf("error: %s", err))       }       c.AbortWithStatus(http.StatusInternalServerError)     }()     c.Next()   })    r.GET("/panic", func(c *gin.Context) {     // panic with a string -- the custom middleware could save this to a database or report it to the user     panic("程序崩潰")   })    r.GET("/", func(c *gin.Context) {     c.String(http.StatusOK, "ohai")   })    // Listen and serve on 0.0.0.0:8080   r.Run(":8080") } //模擬程序崩潰: curl http://localhost:8080/panic

感謝各位的閱讀,以上就是“Golang GinWeb框架之文件上傳/程序panic崩潰后自定義處理方式是什么”的內容了,經過本文的學習后,相信大家對Golang GinWeb框架之文件上傳/程序panic崩潰后自定義處理方式是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西贡区| 蒙山县| 双牌县| 宁蒗| 海原县| 保康县| 卓资县| 久治县| 灌云县| 开平市| 耿马| 调兵山市| 常宁市| 陇川县| 云林县| 明溪县| 新密市| 若尔盖县| 灯塔市| 平度市| 佛冈县| 秭归县| 邵东县| 乐安县| 文登市| 滁州市| 依兰县| 大同县| 息烽县| 抚顺市| 锦屏县| 龙泉市| 宜兰县| 密山市| 郴州市| 汾阳市| 阳江市| 台中县| 当涂县| 琼海市| 永昌县|