golang gin下载文件
正常的后端 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")
}
如果碰到 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是文件的字节流
参考:Go:如何通过GIN路由器将文件作为二进制流从AWS S3发送到浏览器?
4、用 c.Data 代替 c.File()
c.Data(200,"application/octet-stream",r) // r是文件的文件reader流指针