我正在開發一個基于 Gin Web 框架的 Go 程式。
我想從本地檔案系統提供圖片。

func main() {
r := gin.Default()
r.Static("/page2", "resources/pictures")
r.GET("/test", func(context *gin.Context) {
name := context.Query("name")
context.JSON(http.StatusOK, gin.H{
"name": name,
})
})
r.GET("/page", func(context *gin.Context) {
name := context.Query("picname")
context.File("resources/pictures/" name ".jpg")
context.JSON(http.StatusOK, "That is " name)
})
r.Run(":9090")
}
我覺得奇怪的是,當我/page2用來獲取圖片(url http://localhost:9090/page2/xiamei.jpg)時,它作業正常。
但是當我/page用來獲取圖片(url http://localhost:9090/page/xiamei.jpg)時,會發生錯誤。
http: 寫了超過宣告的Content-Length
內部原因是什么,這兩種訪問方式存在差異的根本原因是什么?
uj5u.com熱心網友回復:
在/page處理程式中,您同時呼叫Context.File, 和Context.JSON。
第一次呼叫Context.File已經將檔案寫入回應并設定Content-Length標題。
通過使用更多有效負載再次呼叫Context.JSON,您正在增加內容的實際長度而不更新Content-Length標頭;這會導致您看到的錯誤。
r.Static沒有這個問題,因為它提供一個檔案并且沒有添加比它應該更多的有效負載。
在 Gin 處理程式中,您應該只呼叫一個渲染器函式。如果您正在提供檔案,則可以c.JSON完全洗掉最后一個檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/520330.html
標籤:去去金酒
上一篇:如何訪問go主檔案中的子目錄?
