From 16c8d2a8a201c32dad1b360485b89b2a937a2cd3 Mon Sep 17 00:00:00 2001 From: X Date: Tue, 28 Jun 2022 09:24:10 +0800 Subject: [PATCH] Fix raw content io --- server/query.go | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/server/query.go b/server/query.go index dacfd744e..7e5c74aef 100644 --- a/server/query.go +++ b/server/query.go @@ -306,23 +306,40 @@ func query(devMode bool) rex.Handle { return } defer resp.Body.Close() + if resp.StatusCode >= 500 { w.WriteHeader(http.StatusBadGateway) w.Write([]byte("Bad Gateway")) return } - for key, values := range resp.Header { - for _, value := range values { - ctx.AddHeader(key, value) - } - } + if resp.StatusCode >= 400 { w.WriteHeader(http.StatusBadGateway) io.Copy(w, resp.Body) return } + + n, err := fs.WriteFile(savePath, resp.Body) + if err != nil { + w.WriteHeader(500) + w.Write([]byte(err.Error())) + return + } + + f, err := fs.ReadFile(savePath, n) + if err != nil { + w.WriteHeader(500) + w.Write([]byte(err.Error())) + return + } + + for key, values := range resp.Header { + for _, value := range values { + ctx.AddHeader(key, value) + } + } ctx.SetHeader("Cache-Control", "public, max-age=31536000, immutable") - fs.WriteFile(savePath, io.TeeReader(resp.Body, w)) + io.Copy(w, f) }) }