gpt4 book ai didi

http - 如何将 io.ReadCloser 流式传输到 http.ResponseWriter

转载 作者:IT王子 更新时间:2023-10-29 01:07:56 26 4
gpt4 key购买 nike

我有一个客户端发出下载文件的请求,Web 服务器将此请求转发到实际保存该文件的资源服务器。从资源服务器返回的 *http.Response 有 Body io.ReaderCloser 从资源服务器流式传输文件内容。但是我正处于我想开始将其写入来自客户端的原始 http.ResponseWriter 的地步。查看 http.ResponseWriter 接口(interface),它只包含一个采用 byte slice 段的 Write 方法,这让我认为将文件内容返回给客户端的唯一方法是将 Body io.ReaderCloser 读入缓冲区,然后将其放入 http.ResponseWriter 的 Write 方法中。我不想这样做,因为那是非常低效的,通过我的网络服务器流式传输它会更好。这可能吗?

这里有一些代码来说明:

getFile() *http.Response {
//make a request to resource server and return the response object
}

// handle request from client
http.HandleFunc("/getFile", func(w http.ResponseWriter, r *http.Request){
res := getFile()
//how can I stream res.Body into w without buffering ?
})

最佳答案

您可以使用 io.Copy()正是这样做的。

Copy copies from src to dst until either EOF is reached on src or an error occurs. It returns the number of bytes copied and the first error encountered while copying, if any.

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

另请注意,Copy() 不会返回 io.EOF,而是返回 nil,因为如果它可以“复制”所有内容,直到 src 报告 io.EOF,这不被认为是错误。

关于http - 如何将 io.ReadCloser 流式传输到 http.ResponseWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34855343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com