Gin 服务 []byte 作为文件

我有一个带有杜松子酒的 golang 后端。它应该作为包含音频文件的 ftp 服务器的代理。因此,我的客户端应该能够调用端点 /download/filepath,然后 Golang 应用程序应该从 ftp 服务器获取文件并将其作为文件(无流)返回。

我目前的解决方案是从 ftp 中读取文件为 []byte 并使用 ioutil.TempFile() 将其临时写入磁盘并使用 ctx.File() 返回该文件。

如果可能的话,我想跳过创建临时文件的步骤。那可能吗?也许有一种方法可以代理呼叫并将 http 呼叫直接连接到 ftp 呼叫?

注意我不控制客户端应用程序,所以我不能改变它。


aluckdog
浏览 372回答 3
3回答

牛魔王的故事

使用Context.Data写入 a[]byte作为响应。您还可以使用Context.DataFromReader直接从 FTP 响应复制到 HTTP 响应。HTTP 响应是字节流。没有办法解决这个问题。

元芳怎么了

在gin框架中向客户端提供二进制文件,然后浏览器在用户点击API时自动下载文件,服务器不需要将文件保存到服务器(无需保存静态文件),然后使用此方法c.Data。其中第三个参数的数据类型为[]byte。我希望这个答案对每个人都有用并且更容易理解。这是一个示例代码。func DownloadFile(c *gin.Context) {    byteFile, err := ioutil.ReadFile("./file.txt")    if err != nil {        fmt.Println(err)    }    c.Header("Content-Disposition", "attachment; filename=file-name.txt")    c.Data(http.StatusOK, "application/octet-stream", byteFile)}

隔江千里

您可以ResponseWriter在读取文件时写入。它的工作原理就像使用http.ResponseWriter.import "io"//...io.Copy(ctx.ResponseWriter, ftpReader)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go