[英]Gin serve []byte as file
我有一個帶有杜松子酒的 golang 后端。 它應該用作包含音頻文件的 ftp 服務器的代理。 所以我的客戶端應該能夠調用端點 /download/filepath ,然后 Golang 應用程序應該從 ftp 服務器獲取文件並將其作為文件(無流)返回。
我當前的解決方案是從 ftp 作為 []byte 讀取文件,並使用 ioutil.TempFile() 將其臨時寫入磁盤並使用 ctx.File() 返回該文件。
如果可能的話,我想跳過創建臨時文件的步驟。 那可能嗎? 也許有一種方法可以代理呼叫並將 http 呼叫直接連接到 ftp 呼叫?
注意我不控制客戶端應用程序,所以我不能改變它。
使用Context.Data寫入[]byte
作為響應。
您還可以使用Context.DataFromReader直接從 FTP 響應復制到 HTTP 響應。
HTTP 響應是字節的 stream。 沒有辦法解決這個問題。
您可以在讀取文件時寫入ResponseWriter
。 它就像使用http.ResponseWriter
一樣工作。
import "io"
//...
io.Copy(ctx.ResponseWriter, ftpReader)
在 gin 框架中向客戶端提供二進制文件,然后瀏覽器會在用戶點擊 API 時自動下載文件,服務器不需要將文件保存到服務器(無需保存 static 文件),然后使用此方法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)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.