我想将HTTP GET响应流式传输到HTTP响应编写器。我在网上搜索了解决方案,最后用io.Copy解决了这个问题。但它不是流,而是下载整个get响应,然后传递给HTTP响应编写器。我被这个问题困扰了两天。如果你知道的话帮帮我。以下是示例代码
package main
import (
"fmt"
"io"
"net/http"
"time"
"github.com/gorilla/mux"
)
func main() {
router := mux.NewRouter()
router.Path("/test").HandlerFunc(Stream).Methods("GET")
srv := &http.Server{
Addr: ":4000",
Handler: router,
ReadTimeout: 30 * time.Minute,
WriteTimeout: 30 * time.Minute,
IdleTimeout: 60 * time.Minute,
}
srv.SetKeepAlivesEnabled(true)
fmt.Println(srv.ListenAndServe())
}
// Stream .
func Stream(w http.ResponseWriter, r *http.Request) {
req, err := http.NewRequest("GET", "https://lh3.googleusercontent.com/k3ysodYwXwhm7ThrM_-zbqhETk8CUfMd5vuG9RbjBKrKAKQaUfZpiRRDg8ZEaT-WfsDkRfS_cheTM4JvT3TEoNEPF4gzofkq0Y6ykGVT_WhG4hXG-nAdkpeyeY1kMysqBWdS5YDGIPY=d", nil)
if err != nil {
return
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return
}
defer resp.Body.Close()
w.Header().Set("content-type", "video/mp4")
w.WriteHeader(206)
w.Header().Set("Status", "206")
i, err := io.Copy(w, resp.Body)
fmt.Println(i, err)
}
发布于 2021-05-21 14:54:26
使用io.Copy
是将http请求正文的内容流式传输到响应正文。我不知道你为什么不这么想。
另外,请直接在问题中发布您的代码,而不是在外部链接中。
https://stackoverflow.com/questions/67632065
复制相似问题