前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang gin下载文件

golang gin下载文件

原创
作者头像
IT工作者
发布2022-07-08 10:33:26
2.8K0
发布2022-07-08 10:33:26
举报
文章被收录于专栏:程序技术知识

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

代码语言:javascript
复制
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

代码语言:javascript
复制
c.Header("Content-Length", "-1")

或者

代码语言:javascript
复制
c.Header("Transfer-Encoding", "true")

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

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

代码语言:javascript
复制
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()

代码语言:javascript
复制
c.Data(200,"application/octet-stream",r) // r是文件的文件reader流指针

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档