diff options
Diffstat (limited to 'weed/util/http_util.go')
| -rw-r--r-- | weed/util/http_util.go | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/weed/util/http_util.go b/weed/util/http_util.go index 783ff2379..bb1a32ede 100644 --- a/weed/util/http_util.go +++ b/weed/util/http_util.go @@ -60,7 +60,7 @@ func Get(url string) ([]byte, bool, error) { if err != nil { return nil, true, err } - defer response.Body.Close() + defer CloseResponse(response) var reader io.ReadCloser switch response.Header.Get("Content-Encoding") { @@ -242,8 +242,8 @@ func ReadUrl(fileUrl string, cipherKey []byte, isContentCompressed bool, isFullC if err != nil { return 0, err } + defer CloseResponse(r) - defer r.Body.Close() if r.StatusCode >= 400 { return 0, fmt.Errorf("%s: %s", fileUrl, r.Status) } @@ -370,11 +370,11 @@ func readEncryptedUrl(fileUrl string, cipherKey []byte, isContentCompressed bool return false, nil } -func ReadUrlAsReaderCloser(fileUrl string, jwt string, rangeHeader string) (io.ReadCloser, error) { +func ReadUrlAsReaderCloser(fileUrl string, jwt string, rangeHeader string) (*http.Response, io.ReadCloser, error) { req, err := http.NewRequest("GET", fileUrl, nil) if err != nil { - return nil, err + return nil, nil, err } if rangeHeader != "" { req.Header.Add("Range", rangeHeader) @@ -388,10 +388,11 @@ func ReadUrlAsReaderCloser(fileUrl string, jwt string, rangeHeader string) (io.R r, err := client.Do(req) if err != nil { - return nil, err + return nil, nil, err } if r.StatusCode >= 400 { - return nil, fmt.Errorf("%s: %s", fileUrl, r.Status) + CloseResponse(r) + return nil, nil, fmt.Errorf("%s: %s", fileUrl, r.Status) } var reader io.ReadCloser @@ -399,15 +400,17 @@ func ReadUrlAsReaderCloser(fileUrl string, jwt string, rangeHeader string) (io.R switch contentEncoding { case "gzip": reader, err = gzip.NewReader(r.Body) - defer reader.Close() default: reader = r.Body } - return reader, nil + return r, reader, nil } func CloseResponse(resp *http.Response) { + if resp == nil || resp.Body == nil { + return + } reader := &CountingReader{reader: resp.Body} io.Copy(io.Discard, reader) resp.Body.Close() |
