From e72382b8c3093ac8cbbb3b79147c3387d37e8ffb Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期五, 17 五月 2024 22:20:20 +0800 Subject: [PATCH] 添加图片下载功能 --- util/http.go | 84 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 84 insertions(+), 0 deletions(-) diff --git a/util/http.go b/util/http.go index 38ad875..d518287 100644 --- a/util/http.go +++ b/util/http.go @@ -3,8 +3,12 @@ import ( "bytes" "encoding/json" + "errors" + "fmt" "io" "net/http" + "strconv" + "time" "gat1400Exchange/pkg/logger" "gat1400Exchange/vo" @@ -109,3 +113,83 @@ return body, nil } + +func ImageDownload(downloadUrl string, fb func(length, downLen int64)) ([]byte, error) { + var ( + fSize int64 + buf = make([]byte, 10*1024) + buffer bytes.Buffer + written int64 + ) + + request, err := http.NewRequest("GET", downloadUrl, nil) + if err != nil { + return nil, err + } + + //鍒涘缓涓�涓猦ttp client + client := new(http.Client) + client.Timeout = time.Second * 600 //璁剧疆瓒呮椂鏃堕棿 + + // get鏂规硶鑾峰彇璧勬簮 + resp, err := client.Do(request) + if err != nil { + return nil, err + } + + if resp.StatusCode != 200 { + return nil, errors.New(fmt.Sprintf("璇锋眰澶辫触, 鐘舵�佺爜:%d", resp.StatusCode)) + } + + //璇诲彇鏈嶅姟鍣ㄨ繑鍥炵殑鏂囦欢澶у皬 + fSize, err = strconv.ParseInt(resp.Header.Get("Content-Length"), 10, 32) + if err != nil { + return nil, err + } + + if resp.Body == nil { + return nil, errors.New("body is null") + } + + defer resp.Body.Close() + + //涓嬮潰鏄� io.copyBuffer() 鐨勭畝鍖栫増鏈� + for { + //璇诲彇bytes + nr, er := resp.Body.Read(buf) + if nr > 0 { + //鍐欏叆bytes + nw, ew := buffer.Write(buf[0:nr]) + //鏁版嵁闀垮害澶т簬0 + if nw > 0 { + written += int64(nw) + } + + //鍐欏叆鍑洪敊 + if ew != nil { + err = ew + break + } + + //璇诲彇鏄暟鎹暱搴︿笉绛変簬鍐欏叆鐨勬暟鎹暱搴� + if nr != nw { + err = io.ErrShortWrite + break + } + } + + if er != nil { + if er != io.EOF { + err = er + } + break + } + + //娌℃湁閿欒浜嗗揩浣跨敤 callback + if fb != nil { + fb(fSize, written) + } + } + + return buffer.Bytes(), err +} -- Gitblit v1.8.0