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