正常的后端 Gin 框架代码,使用 c.File() 文件来下载文件

package main

import (
"github.com/gin-gonic/gin"
)

func main() {
router := gin.Default()

router.GET("/local/file", func(c *gin.Context) {
c.File("local/file.go")
})
router.Run(":8080")
}

参考:​​Gin 实现上传/下载服务​​

如果碰到 wrote more than the declared Content-Length 问题

我的场景暂时还没有找到解决办法,可以参考下面这些方法,看看能否解决你的问题

1、指定 Content-Length 为 -1

c.Header("Content-Length", "-1")

或者

c.Header("Transfer-Encoding", "true")

参考:​​解决 golang 中 wrote more than the declared Content-Length​​

2、指定需要传输的文件类型Content-Type 和 Content-Transfer-Encoding

c.Header("Content-Type", "application/octet-stream")
c.Header("Content-Disposition", "attachment; filename="+fileName) // 用来指定下载下来的文件名
c.Header("Content-Transfer-Encoding", "binary")

3、用 ctx.DataFromReader 代替 C.File()

ctx.DataFromReader(200, response.ContentLength, "application/octet-stream", fileContent, nil) // fileContent是文件的字节流

4、用 c.Data 代替 c.File()

c.Data(200,"application/octet-stream",r) // r是文件的文件reader流指针