精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Golang GinWeb框架2-文件上傳/程序panic崩潰后自定義處理方式

開發 前端
本文接著上文(Golang GinWeb框架-快速入門/參數解析)繼續探索GinWeb框架

[[353965]]

 簡介

本文接著上文(Golang GinWeb框架-快速入門/參數解析)繼續探索GinWeb框架

上傳文件

單文件上傳

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

  1. package main 
  2.  
  3. import ( 
  4.   "fmt" 
  5.   "github.com/gin-gonic/gin" 
  6.   "log" 
  7.   "net/http" 
  8.   "os" 
  9.  
  10. func main() { 
  11.   router := gin.Default() 
  12.   // Set a lower memory limit for multipart forms (default is 32 MiB) 
  13.   // 設置請求表單最大內存限制,默認是30MB 
  14.  
  15.   //內部調用http請求的ParseMultipartForm方法,該方法要求傳入一個字節數, 要取MultipartForm字段的數據,先使用ParseMultipartForm()方法解析Form,解析時會讀取所有數據,但需要指定保存在內存中的最大字節數,剩余的字節數會保存在臨時磁盤文件中 
  16.   maxMultipartMemory := int64(8 << 20) 
  17.   log.Printf("解析文件到內存的最大字節:%d", maxMultipartMemory) 
  18.   router.MaxMultipartMemory = maxMultipartMemory  // 8 MiB 
  19.   router.POST("/upload", func(c *gin.Context) { 
  20.     // single file 
  21.     file, _ := c.FormFile("file")  //FormFile從表單中返回第一個匹配到的文件對象(結構) 
  22.     log.Printf("獲取到的文件名:%s", file.Filename)  //文件名必須是安全可信耐的,需要去掉路徑信息,保留文件名即可 
  23.  
  24.     // Upload the file to specific dst. 
  25.     currentPath, _ := os.Getwd()  //獲取當前文件路徑 
  26.     dst := currentPath + "/" + file.Filename 
  27.     log.Printf("保存文件絕對路徑:%s", dst) 
  28.     c.SaveUploadedFile(file, dst) 
  29.  
  30.     c.String(http.StatusOK, fmt.Sprintf("'%s' uploaded!", file.Filename)) 
  31.   }) 
  32.   router.Run(":8080"
  33.  
  34. //模擬單文件上傳: 
  35. //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)

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

路由分組

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

  1. func main() { 
  2.   router := gin.Default() 
  3.   // Simple group: v1  路由分組1 
  4.   v1 := router.Group("/v1"
  5.   { 
  6.     v1.POST("/login", loginEndpoint) 
  7.     v1.POST("/submit", submitEndpoint) 
  8.     v1.POST("/read", readEndpoint) 
  9.   } 
  10.   // Simple group: v2  路由分組2 
  11.   v2 := router.Group("/v2"
  12.   { 
  13.     v2.POST("/login", loginEndpoint) 
  14.     v2.POST("/submit", submitEndpoint) 
  15.     v2.POST("/read", readEndpoint) 
  16.   } 
  17.   router.Run(":8080"

中間件

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

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

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

  1. package main 
  2.  
  3. import ( 
  4.   "fmt" 
  5.   "github.com/gin-gonic/gin" 
  6.   "log" 
  7.   "net/http" 
  8.  
  9. func CustomRecovery() gin.HandlerFunc { 
  10.   return func(c *gin.Context) { 
  11.     defer func() { 
  12.       //if r := recover(); r != nil { 
  13.       //  log.Printf("崩潰信息:%s", r) 
  14.       //} 
  15.  
  16.       if err, ok := recover().(string); ok { 
  17.         log.Printf("您可以在這里完成告警任務,郵件,微信等告警"
  18.         c.String(http.StatusInternalServerError, fmt.Sprintf("error: %s", err)) 
  19.       } 
  20.       c.AbortWithStatus(http.StatusInternalServerError) 
  21.     }() 
  22.     c.Next() 
  23.   } 
  24.  
  25. func main() { 
  26.   // Creates a router without any middleware by default 
  27.   r := gin.New() 
  28.  
  29.   // Global middleware 
  30.   // Logger middleware will write the logs to gin.DefaultWriter even if you set with GIN_MODE=release. 
  31.   // By default gin.DefaultWriter = os.Stdout 
  32.   r.Use(gin.Logger()) 
  33.  
  34.   // Recovery middleware recovers from any panics and writes a 500 if there was one. 
  35.   //r.Use(CustomRecovery())  //使用自定義中間件處理程序崩潰 
  36.  
  37.   //使用匿名函數組成中間件,處理程序崩潰 
  38.   r.Use(func( c *gin.Context){ 
  39.     defer func() { 
  40.       if err, ok := recover().(string); ok { 
  41.         log.Printf("您可以在這里完成告警任務,郵件,微信等告警"
  42.         c.String(http.StatusInternalServerError, fmt.Sprintf("error: %s", err)) 
  43.       } 
  44.       c.AbortWithStatus(http.StatusInternalServerError) 
  45.     }() 
  46.     c.Next() 
  47.   }) 
  48.  
  49.   r.GET("/panic", func(c *gin.Context) { 
  50.     // panic with a string -- the custom middleware could save this to a database or report it to the user 
  51.     panic("程序崩潰"
  52.   }) 
  53.  
  54.   r.GET("/", func(c *gin.Context) { 
  55.     c.String(http.StatusOK, "ohai"
  56.   }) 
  57.  
  58.   // Listen and serve on 0.0.0.0:8080 
  59.   r.Run(":8080"
  60. //模擬程序崩潰: curl http://localhost:8080/panic 

參考文檔

Gin官方倉庫:https://github.com/gin-gonic/gin

 

責任編輯:姜華 來源: 云原生云
相關推薦

2020-11-25 09:10:39

Golang GinW

2020-12-10 10:22:48

GinWeb中間件HTTPS

2020-12-03 09:28:05

Golang GinW

2020-12-08 12:05:48

Golang GinW框架HTTPS

2020-11-23 10:48:39

Golang GinW

2022-03-07 14:39:01

前端框架批處理

2020-11-26 10:08:17

Golang GinW

2020-12-02 11:18:28

Golang GinW

2021-05-28 08:58:41

Golang網卡metrics

2023-07-10 08:00:13

架構Rest返回值

2023-10-31 09:10:39

2009-06-25 14:53:35

自定義UI組件JSF框架

2023-07-28 09:26:43

GolangZap

2017-04-17 10:05:51

Hadoop錯誤方式

2009-12-31 14:25:19

Silverlight

2009-11-05 10:38:05

Visual Stud

2022-09-20 07:01:50

對象初始化代碼

2024-11-18 09:18:21

Gin框架驗證器

2009-07-07 14:32:47

JDK日志Formatter

2021-01-14 19:04:36

框架數據庫mybatis
點贊
收藏

51CTO技術棧公眾號

欧美怡红院视频| 波多野结衣在线aⅴ中文字幕不卡| 亚洲一区二区黄| av亚洲天堂网| 国精产品一区一区三区mba下载| 99久久伊人精品| 国产精品爽爽爽| 久久久久久免费观看| 五月天亚洲一区| 欧美视频日韩视频在线观看| 国产尤物av一区二区三区| 人成免费电影一二三区在线观看| 久久99这里只有精品| 久久欧美在线电影| jizzjizz日本少妇| 欧美日韩精品一区二区三区在线观看| 欧美丝袜第三区| 日本a在线免费观看| 午夜在线观看视频| 91视频在线看| 亚洲影院色无极综合| 国产一区二区视频网站| 亚洲无线视频| 日韩中文字幕国产| 中国黄色a级片| 亚洲1区在线| 欧美日韩大陆在线| 亚洲中文字幕无码不卡电影| 久久免费电影| 中文字幕一区二区不卡| 欧美午夜精品久久久久久蜜| 国产jzjzjz丝袜老师水多| 日韩成人免费看| 91a在线视频| 久久久综合久久| 国产精品久久久久久| 亚洲夜晚福利在线观看| 性欧美18—19sex性高清| 伊人久久大香| 精品视频免费在线| 亚洲熟妇av一区二区三区| 精品精品导航| 一区二区三区在线免费观看| 国产又爽又黄ai换脸| yw视频在线观看| 久久久噜噜噜久久人人看 | 欧美激情精品久久久久久| 日本在线观看网址| 日本久久精品| 中文字幕日韩电影| 国产成人福利在线| 免费久久久久久久久| 国产视频在线一区二区| 特大黑人巨人吊xxxx| 国产精东传媒成人av电影| 欧美va亚洲va国产综合| 成人啪啪18免费游戏链接| 日韩成人久久| 精品国产免费人成电影在线观看四季 | 日日夜夜一区二区| 日本伊人精品一区二区三区介绍| av中文在线播放| 亚洲一区二区网站| 日韩av电影手机在线| 无码人妻精品一区二区蜜桃色欲| 久久精品一区二区国产| 国产成人一区二区| 一级淫片免费看| 国内精品久久久久影院薰衣草| 国产日韩欧美中文| 国产特级黄色片| 国产不卡免费视频| 精品视频一区二区| 国产在线三区| 国产精品久久久久久久久晋中| 一本色道久久99精品综合| 成人毛片av在线| 亚洲一二三区在线观看| 国内自拍在线观看| 日日夜夜天天综合| 欧美精品 国产精品| 亚洲性图第一页| 思热99re视热频这里只精品| 亚洲少妇中文在线| 97精品在线播放| 亚洲高清免费| 国产精品成人免费电影| 国产色综合视频| 99国产精品99久久久久久| 日韩少妇中文字幕| 午夜av在线免费观看| 精品久久久久久久久久国产| 蜜臀av免费观看| 亚洲精品黑牛一区二区三区| 日韩激情av在线免费观看| 日韩欧美视频免费观看| 亚洲二区视频| 国产欧美精品一区二区| 狠狠躁日日躁夜夜躁av| 欧美极品少妇xxxxⅹ高跟鞋| 996这里只有精品| 日韩av超清在线观看| 日韩三级电影网址| 国产jjizz一区二区三区视频| 亚洲国产一区二区三区在线播放| 69视频在线免费观看| 一级黄色a视频| 99麻豆久久久国产精品免费优播| 亚洲人成77777| 国产剧情av在线播放| 欧美日韩高清一区| 亚洲国产欧美视频| 欧美日韩综合| 国产在线999| 全部免费毛片在线播放网站| 亚洲综合999| 成人黄色一级大片| 久久99国产精一区二区三区| 久久久久久久久爱| 国产美女免费视频| 国产欧美精品一区| 久在线观看视频| 日韩中文在线| 久久久精品视频成人| 国产第一页在线观看| 成人h精品动漫一区二区三区| 亚洲精品国产精品国自产| 欧美激情20| 亚洲国产第一页| www.色小姐com| 日本日本19xxxⅹhd乱影响| 欧美电影院免费观看| 一区二区三区四区精品| 中文字幕视频网| 99这里只有精品| 麻豆传媒网站在线观看| 性欧美video另类hd尤物| 国产一区二区三区三区在线观看| jizz国产免费| 国产69精品久久久久777| 最新不卡av| 91精品店在线| 在线视频一区二区| 日韩久久久久久久久久| 久久综合色天天久久综合图片| 每日在线观看av| 国产亚洲成av人片在线观黄桃| 欧美成人精品在线| 国产激情视频在线播放| 亚洲女厕所小便bbb| 亚洲高清在线不卡| 欧美极品一区二区三区| 春色成人在线视频| 手机av免费在线| 精品成人免费观看| 国内免费精品视频| 91理论电影在线观看| 欧美在线观看成人| 久久99蜜桃| 国产精品久久久久久久美男| 四虎久久免费| 日韩视频免费直播| 国产一级特黄a高潮片| 97成人超碰视| 日本女优爱爱视频| 日韩高清欧美| 日韩免费av在线| 91亚洲欧美| 欧美在线免费视屏| 日韩三级久久久| 国产乱码一区二区三区| 免费高清一区二区三区| 人人精品亚洲| 国产精品69久久| 老司机精品视频在线观看6| 制服丝袜一区二区三区| 伊人国产在线观看| 久久久久久久国产精品影院| 久久久久久久片| 亚洲综合小说| 精品国产一区二区三区日日嗨| av资源亚洲| 日日噜噜噜夜夜爽亚洲精品 | 日韩经典中文字幕| 国产无遮挡又黄又爽又色视频| 成人欧美一区二区三区| 逼特逼视频在线观看| 免费视频久久| 日本一级淫片演员| 日韩aaa久久蜜桃av| 国产欧美韩国高清| 人成在线免费网站| 日韩在线视频免费观看| 动漫av一区二区三区| 欧美最猛性xxxxx直播| 久久久久97国产| 久久夜色精品国产噜噜av | 成年人午夜久久久| 青青在线免费观看视频| 一区二区电影| 日本a级片久久久| 嫩呦国产一区二区三区av| 欧美性在线视频| 中文字幕中文字幕在线中高清免费版 | 色偷偷88欧美精品久久久| 久久久久久久久久97| 91影院在线观看| 国产老头和老头xxxx×| 久久国产欧美| 69sex久久精品国产麻豆| 99热在线成人| 日韩久久精品一区二区三区| 久久久久久久久久久久久久久久久久久久| 国产精品网红福利| 9i看片成人免费高清| 欧美国产日本高清在线 | 偷偷色噜狠狠狠狠的777米奇| 免费看黄色91| 人妻熟妇乱又伦精品视频| 亚洲有吗中文字幕| 午夜午夜精品一区二区三区文| 国产成人福利av| 成人性生交xxxxx网站| av久久网站| 全球成人中文在线| av资源中文在线| 欧美激情国内偷拍| 伊人福利在线| 日韩在线观看免费高清| 国产高清一级毛片在线不卡| 亚洲电影在线看| 午夜精品久久久久久久96蜜桃| 欧美日本在线看| 中文字幕在线观看国产| 日本二三区不卡| www.久久久久久久| 欧美日韩国产一区二区三区| 男人的天堂一区| 亚洲国产精品一区二区www| 久草福利资源在线观看| 亚洲免费观看在线观看| 永久免费看mv网站入口| 中文字幕一区二区三| 一级黄色片日本| 亚洲视频在线一区观看| 久久久久久久久久97| 亚洲色图在线视频| 日本青青草视频| 亚洲欧美一区二区三区国产精品 | 日本高清黄色片| 国产午夜亚洲精品理论片色戒| wwwwww日本| 国产三区在线成人av| 欧美激情 一区| 中文字幕在线视频一区| 91麻豆免费视频网站| 亚洲激情图片qvod| 免费视频网站www| 亚洲第一福利视频在线| 五月婷婷中文字幕| 在线视频你懂得一区| 中文字幕人妻精品一区| 欧美日韩国产123区| 国产色片在线观看| 亚洲白拍色综合图区| 无码国产精品高潮久久99| 亚洲欧洲激情在线| 免费在线观看av网站| 久久99精品视频一区97| 888av在线视频| 国产成人精品午夜| 国产精品久久久久久av公交车| 91成人免费在线观看| 精品久久97| 视频在线观看成人| 欧美1区免费| 日本a级片免费观看| 麻豆一区二区三| aaa黄色大片| 国产日韩亚洲欧美综合| av激情在线观看| 色综合久久久久久久久久久| 国产又爽又黄又嫩又猛又粗| 精品国免费一区二区三区| 精品视频一二三| 欧美成人四级hd版| 在线免费三级电影网站| 国产在线拍偷自揄拍精品| 成人看片爽爽爽| 日韩精品久久久| 欧美激情亚洲| 亚洲国产精品三区| www.99精品| 午夜激情视频在线播放| 精品高清美女精品国产区| 一二三四区在线| 国产视频精品在线| 亚洲图区一区| 国产精品电影观看| 精品三级av在线导航| 亚洲精品8mav| 先锋亚洲精品| 国产大尺度视频| 国产精品三级av在线播放| 日韩av一二三区| 91精品国产欧美一区二区| 人成免费电影一二三区在线观看| 欧美乱大交xxxxx| 黄色精品视频| 明星裸体视频一区二区| 精品av久久久久电影| 久久成年人网站| 国产欧美一区二区三区沐欲| 中文字幕一区二区三区精品| 91精品国产手机| yourporn在线观看中文站| 97在线日本国产| **爰片久久毛片| 欧美aaa在线观看| 麻豆视频一区二区| 先锋影音av在线| 欧美视频在线观看免费| 欧性猛交ⅹxxx乱大交| 欧美成人免费在线观看| 日韩午夜电影免费看| 色视频一区二区三区| 久久国产日本精品| 特大黑人巨人吊xxxx| 午夜精品久久久久久久久久 | 国产福利一区在线| 国产中文av在线| 欧美日韩国产123区| √天堂资源地址在线官网| 热久久免费视频精品| 欧美大奶一区二区| 农民人伦一区二区三区| 懂色av一区二区三区免费观看| 欧产日产国产v| 日韩欧美的一区| 秋霞在线视频| 国产精品二区三区四区| 国产精品a久久久久| 香蕉在线观看视频| 一区二区在线观看视频 | 老司机精品视频网| 亚洲欧美丝袜| 韩国精品久久久| 卡通动漫亚洲综合| 欧美一卡二卡三卡| 亚洲资源一区| 国产精品xxxx| 国产精品人人爽人人做我的可爱 | 亚洲欧洲无码一区二区三区| 91av久久久| 欧美精品在线视频观看| 91在线一区| 精品视频免费在线播放| 久久亚洲一区二区三区明星换脸| 黄色在线免费观看| 亚洲欧美制服第一页| 成人福利片在线| 中文字幕免费高| 成人天堂资源www在线| 男女视频免费看| 亚洲午夜小视频| 久久视频社区| 国产av麻豆mag剧集| 久久色.com| 国产又粗又猛又爽又黄的视频一| 久久成人一区二区| 国产精品调教| 国产97色在线 | 日韩| 中文字幕一区二区三区乱码在线| 精品人妻一区二区三区含羞草| 午夜精品久久久久久久99黑人 | 日韩在线欧美在线国产在线| 高清久久精品| 人妻久久久一区二区三区| 国产三级一区二区| 91女人18毛片水多国产| 久久青草福利网站| 日韩免费视频| 日韩www视频| 欧美日韩日日夜夜| 俺来也官网欧美久久精品| 日本一区网站| 国产精品性做久久久久久| 4438国产精品一区二区| 久久精品久久精品亚洲人| 久久a爱视频| 欧美性受xxxxxx黑人xyx性爽| 亚洲图片欧美色图| 日本最新在线视频| 久久综合中文色婷婷| 精品一区二区三区免费视频| 在线观看黄网站| 久久99精品久久久久久琪琪| 色999日韩| 91精品人妻一区二区| 欧美一区二区三区日韩|