精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

东方av正在进入| 中文字幕第80页| 女人18毛片一区二区三区| 一本久道久久久| 亚洲亚裔videos黑人hd| 最新免费av网址| 女人高潮被爽到呻吟在线观看| 久久婷婷国产综合国色天香| 国产欧美日韩中文字幕| 免费三片在线播放| 国产一区日韩| 精品免费一区二区三区| 成人亚洲视频在线观看| av黄在线观看| 在线视频第一页| 欧美成人免费电影| 亚洲欧美日韩久久精品| 韩日午夜在线资源一区二区| 羞羞色院91蜜桃| 国产在线欧美| 最近免费中文字幕视频2019| 国产chinese中国hdxxxx| 色天使综合视频| 亚洲福利视频导航| 在线视频不卡一区二区三区| 国产精品国产高清国产| 激情综合色播激情啊| 欧洲s码亚洲m码精品一区| 朝桐光av在线| 天天射天天综合网| 亚洲欧美国产高清va在线播| 波多野结衣三级视频| 日本h片久久| 欧美天天综合色影久久精品| 欧美—级高清免费播放| 亚洲午夜久久久久久久国产| 成人av地址| 欧美一区二区三区四区高清| 男人透女人免费视频| 波多野结衣中文在线| 国产91精品免费| 91精品国产自产在线老师啪| 天堂а√在线中文在线新版 | 亚洲精品久久久久久下一站| 无码人妻少妇色欲av一区二区| 成人涩涩视频| 欧美日韩在线播放三区四区| 黑人粗进入欧美aaaaa| 亚洲最大成人| 粉嫩老牛aⅴ一区二区三区| 男人天堂av片| 岛国av免费在线观看| 亚洲一区二区三区免费视频| 337p亚洲精品色噜噜狠狠p| 成人欧美在线| 亚洲视频一区二区在线观看| 亚洲开发第一视频在线播放| 国产毛片在线| 麻豆成人久久精品二区三区红 | 精品性高朝久久久久久久| 四虎精品一区二区| 精品三级av| 亚洲精品美女在线观看| 丰满少妇在线观看资源站| 欧美大胆性生话| 色婷婷久久久久swag精品| 中文字幕乱码一区二区三区| 欧美激情午夜| 成人av综合一区| 精品福利影视| 久久久久久久影视| 中文字幕乱码日本亚洲一区二区| 日韩中文不卡| 亚洲精品一区二区三区不卡| 国产成人自拍在线| 亚洲永久在线观看| 亚洲黄色小说网| 久久新电视剧免费观看| 欧美精品123| 亚洲av色香蕉一区二区三区| 高清在线成人网| 久久爱av电影| youjizz在线播放| 亚洲精品乱码久久久久久久久| 国产一区二区三区小说| 精品国产免费人成网站| 欧美三电影在线| 伊人影院在线观看视频| 羞羞色国产精品网站| 中文字幕免费精品一区| 欧美黄色一级网站| 亚洲综合丁香| 成人黄色午夜影院| 五月婷婷丁香花| 中文字幕在线一区| 国精产品一区一区三区视频| 日韩欧美精品一区二区综合视频| 91精品国产91热久久久做人人| 中国xxxx性xxxx产国| 波多野结衣一区| 欧美激情小视频| 中文字幕人妻精品一区| 成人免费看黄yyy456| 欧美日韩国产综合视频在线| 国产原厂视频在线观看| 欧美国产禁国产网站cc| 在线观看av的网址| 三区四区在线视频| 亚洲高清不卡在线| 亚洲图色中文字幕| 美女亚洲一区| 高清欧美性猛交xxxx| 一区二区三区在线免费观看视频| 成人福利视频在线| 一区二区三区视频在线播放| 蜜芽tv福利在线视频| 亚洲欧美偷拍卡通变态| 日韩中文字幕二区| 亚洲高清999| 日韩一二三区不卡| 午夜精产品一区二区在线观看的| 91免费国产网站| 九色视频成人自拍| 亚洲一区二区三区国产| 色播五月激情五月| 国产一区二区三区天码| 高清欧美性猛交| 午夜精品一二三区| 亚洲丝袜自拍清纯另类| 欧美激情精品久久久久久小说| 97久久综合区小说区图片区| 久久久精品电影| 国产日韩久久久| 久久久亚洲欧洲日产国码αv| 毛片av在线播放| 高清久久一区| 精品国产一区二区在线| 国产美女www爽爽爽| 91免费精品国自产拍在线不卡| 人妻av无码专区| heyzo中文字幕在线| 日韩一区二区视频| 小泽玛利亚一区| 国产真实乱对白精彩久久| 亚洲欧美一区二区原创| 欧美在线va视频| 中文字幕亚洲二区| 在线观看免费观看在线| 中文一区二区完整视频在线观看| 黑鬼大战白妞高潮喷白浆| 在线视频亚洲专区| 国产91九色视频| 国产毛片在线看| 欧美三级电影在线看| 免费黄色在线网址| 青青草免费观看免费视频在线| 日韩专区欧美专区| 蜜桃视频在线观看91| 成人午夜视频一区二区播放| 亚洲欧美综合色| 日韩av加勒比| 欧美女激情福利| 国产精品一区二区三区四区五区 | 四虎影视精品成人| 香蕉成人啪国产精品视频综合网| 国产草草浮力影院| 亚洲综合欧美| 日韩一区二区电影在线观看| 国产成人免费| 欧美日本精品在线| 欧美福利视频一区二区| 91影院在线免费观看| 日本免费黄视频| 久久人体视频| 成人xxxxx色| 美女100%一区| 久久精品青青大伊人av| 乱精品一区字幕二区| 日韩欧美成人精品| 亚洲黄色网址大全| 国产成人aaa| 欧美韩国日本在线| 99精品视频在线观看播放| 亚洲在线免费看| 麻豆mv在线看| 日韩最新在线视频| 色偷偷在线观看| 在线欧美一区二区| 91视频免费在线看| 2020国产精品久久精品美国| 牛夜精品久久久久久久| 国产综合精品一区| 亚洲欧美丝袜| 婷婷精品在线| 成人黄色大片在线免费观看| 日韩av一卡| 精品久久国产精品| 污视频在线免费| 制服丝袜亚洲播放| 国产精品人人人人| 亚洲黄色免费网站| 麻豆精品免费视频| 成人免费视频app| 尤物国产在线观看| 亚洲一区区二区| 久久天天东北熟女毛茸茸| 亚洲第一福利专区| 国产福利久久精品| 久久天天久久| 自拍偷拍亚洲在线| 日本黄色三级视频| 日韩一级高清毛片| 蜜臀尤物一区二区三区直播| 亚洲国产日韩综合久久精品| 激情高潮到大叫狂喷水| 久久―日本道色综合久久 | 91在线精品秘密一区二区| 爱爱爱爱免费视频| 久久精品女人天堂| 草草视频在线免费观看| 911久久香蕉国产线看观看| 色就是色欧美| 日韩精品丝袜美腿| 国产精品日韩欧美一区二区| 亚洲色图图片| 国产精品丝袜久久久久久高清 | 色中色综合影院手机版在线观看| 国产高清一级毛片在线不卡| 亚洲第一在线视频| www.久久久久久| 91精品婷婷国产综合久久| 欧美日韩 一区二区三区| 精品久久久久久久久久ntr影视| 青春草免费视频| 亚洲欧美日韩一区| 国产高潮国产高潮久久久91| 国产精品成人网| 日韩av网站在线播放| 欧美激情一区二区在线| 亚洲最大成人网站| 久久精品一二三| 国产男女猛烈无遮挡a片漫画| www.成人网.com| 99精品一区二区三区无码吞精| 国产98色在线|日韩| 国产在线a视频| 国产69精品久久777的优势| 久久无码人妻一区二区三区| 国产伦精品一区二区三区免费迷| 日韩av加勒比| 国产成人午夜99999| 性高潮久久久久久| aaa欧美色吧激情视频| 国产精品久久不卡| 久久综合成人精品亚洲另类欧美| 一出一进一爽一粗一大视频| 99国产精品久久久久| 国产特黄级aaaaa片免| 91农村精品一区二区在线| 国产交换配乱淫视频免费| 国产日韩欧美麻豆| 开心激情五月网| 亚洲精选视频在线| 成人免费无遮挡无码黄漫视频| 久久免费的精品国产v∧| 西西444www无码大胆| 国产精品美女一区二区| 久久久久亚洲av片无码| 亚洲激情图片小说视频| 国产午夜在线播放| 欧美在线播放高清精品| 国产一区二区三区四区视频| 日韩视频免费观看高清完整版在线观看| 99久久99久久久精品棕色圆| 精品少妇一区二区| 日本福利在线观看| 中文字幕欧美精品日韩中文字幕| 日本综合在线| 欧美极品美女视频网站在线观看免费 | 伊人再见免费在线观看高清版 | 色就是色亚洲色图| 中文字幕视频一区二区在线有码| 中文字幕在线三区| 欧美一区二区影院| 亚洲精品tv| 精品一区久久久| 欧美3p在线观看| 人妻少妇精品久久| 秋霞av亚洲一区二区三| 亚洲熟女一区二区三区| 久久婷婷综合激情| avove在线播放| 日韩欧美中文免费| 国产人妻精品一区二区三区| 日韩经典第一页| 国产福利在线播放麻豆| 清纯唯美亚洲综合| 日韩高清一区| 日韩成人av网站| 激情婷婷久久| 黄色小视频免费网站| 99久久精品一区二区| 69夜色精品国产69乱| 日韩欧美成人网| 亚洲AV无码精品自拍| 在线观看国产精品淫| h片在线观看视频免费| 国产日韩欧美在线观看| 亚洲春色h网| 国产精品一色哟哟| 国产一区激情在线| www色com| 欧美性开放视频| 丰满人妻一区二区三区免费视频| 中文字幕亚洲图片| 涩涩视频在线| 国产麻豆乱码精品一区二区三区| 午夜av一区| 亚洲成人福利在线观看| 99国产精品久久久| 香蕉视频一区二区| 日韩一区国产二区欧美三区| 午夜激情在线观看| 国产精品久久久久久搜索 | 亚洲人成在线播放| 日本aaa在线观看| 色综合久综合久久综合久鬼88| 欧美美女被草| 亚洲免费久久| 免费成人性网站| 免费看的黄色网| 在线观看免费成人| 国产黄在线观看| 国产精品99一区| jlzzjlzz亚洲女人| 日韩福利视频在线| 欧美激情在线一区二区三区| 丁香社区五月天| 亚洲人成绝费网站色www| 五月天av在线| 久久精品一区二区三区不卡免费视频 | 天堂久久一区| 亚洲综合激情五月| 国产曰批免费观看久久久| 欧美视频一区二区在线| 5858s免费视频成人| 美女隐私在线观看| 成人免费在线视频网站| 亚洲精品2区| 中文字幕无码毛片免费看| 一片黄亚洲嫩模| 人人妻人人澡人人爽人人欧美一区 | 国产一区二区视频在线播放| 亚洲波多野结衣| 日韩欧美三级在线| 美女尤物在线视频| 精品欧美一区二区在线观看视频| 亚洲国产精品一区制服丝袜| 久久国产亚洲精品无码| 99精品欧美一区二区三区小说| 日韩黄色三级视频| 亚洲欧美www| 日本黄色成人| 800av在线免费观看| av不卡免费在线观看| 日韩美一区二区| 日韩欧美亚洲国产另类| 黑人玩欧美人三根一起进| 国产伦精品一区二区三区在线| 先锋影音国产一区| wwwww黄色| 日韩免费视频线观看| 日本乱码一区二区三区不卡| 青娱乐国产91| 国产在线国偷精品免费看| 久久一二三四区| 亚洲欧美日本精品| 电影一区二区三区久久免费观看| 男女激情免费视频| 国产欧美一区二区三区在线老狼| 国产精品呻吟久久| 26uuu另类亚洲欧美日本老年| 国产99久久精品一区二区300| 五月花丁香婷婷| 亚洲成人中文在线| av在线电影播放| 国产精品一区二区在线观看| 久久成人精品| 欧美日韩综合一区二区| 国产丝袜一区二区三区免费视频| 99tv成人影院| 国产精品动漫网站| 一区二区免费看| 成人精品一区二区三区校园激情| 97神马电影| 日本成人中文字幕| 日本在线小视频| 久久综合免费视频影院| 九九热线有精品视频99| 波多野结衣中文字幕在线播放|