亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Gin 服務 []byte 作為文件

Gin 服務 []byte 作為文件

Go
aluckdog 2022-06-06 15:33:53
我有一個帶有杜松子酒的 golang 后端。它應該作為包含音頻文件的 ftp 服務器的代理。因此,我的客戶端應該能夠調用端點 /download/filepath,然后 Golang 應用程序應該從 ftp 服務器獲取文件并將其作為文件(無流)返回。我目前的解決方案是從 ftp 中讀取文件為 []byte 并使用 ioutil.TempFile() 將其臨時寫入磁盤并使用 ctx.File() 返回該文件。如果可能的話,我想跳過創建臨時文件的步驟。那可能嗎?也許有一種方法可以代理呼叫并將 http 呼叫直接連接到 ftp 呼叫?注意我不控制客戶端應用程序,所以我不能改變它。
查看完整描述

3 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

使用Context.Data寫入 a[]byte作為響應。

您還可以使用Context.DataFromReader直接從 FTP 響應復制到 HTTP 響應。

HTTP 響應是字節流。沒有辦法解決這個問題。


查看完整回答
反對 回復 2022-06-06
?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

在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)

}


查看完整回答
反對 回復 2022-06-06
?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

您可以ResponseWriter在讀取文件時寫入。它的工作原理就像使用http.ResponseWriter.


import "io"


//...


io.Copy(ctx.ResponseWriter, ftpReader)


查看完整回答
反對 回復 2022-06-06
  • 3 回答
  • 0 關注
  • 410 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號