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

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

如何將 io.ReadCloser 流式傳輸到 http.ResponseWriter

如何將 io.ReadCloser 流式傳輸到 http.ResponseWriter

Go
冉冉說 2021-12-07 10:56:21
我有一個客戶端發出下載文件的請求,Web 服務器將此請求轉發到實際保存該文件的資源服務器。從資源服務器返回的 *http.Response 具有 Body io.ReaderCloser 從資源服務器流式傳輸文件內容。但是我現在想開始將其寫入來自客戶端的原始 http.ResponseWriter 中。查看 http.ResponseWriter 接口,它只包含一個 Write 方法,它需要一個字節片,這讓我認為將文件內容返回給客戶端的唯一方法是將 Body io.ReaderCloser 讀入緩沖區,然后將其放入 http.ResponseWriter 的 Write 方法中。我不想這樣做,因為這非常低效,而且通過我的 Web 服務器流式傳輸它會好得多。這可能嗎?這是一些代碼來說明:getFile() *http.Response {    //make a request to resource server and return the response object}// handle request from clienthttp.HandleFunc("/getFile", func(w http.ResponseWriter, r *http.Request){    res := getFile()    //how can I stream res.Body into w without buffering ?})
查看完整描述

1 回答

?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

您可以使用io.Copy()which 來完成此操作。

將副本從 src 復制到 dst,直到在 src 上達到 EOF 或發生錯誤。它返回復制的字節數和復制時遇到的第一個錯誤(如果有)。

n, err := io.Copy(w, res.Body)
// check err

另請注意,Copy()不會返回io.EOFnil因為如果它可以“復制”所有內容直到src報告io.EOF,則不會被視為錯誤。


查看完整回答
反對 回復 2021-12-07
  • 1 回答
  • 0 關注
  • 347 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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