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")
}

参考: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")

参考:golang+gin 实现文件下载GET接口api

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流指针

参考:请教问题: gin框架 返回二进制文件流时,响应该如何设置?

posted @ 2022-05-16 22:27  Lucky小黄人^_^  阅读(4009)  评论(0编辑  收藏  举报