|
@@ -0,0 +1,95 @@
|
|
|
|
+package knowledge
|
|
|
|
+
|
|
|
|
+import (
|
|
|
|
+ "bytes"
|
|
|
|
+ "eta_gn/eta_bridge/global"
|
|
|
|
+ "eta_gn/eta_bridge/utils"
|
|
|
|
+ "io"
|
|
|
|
+ "mime/multipart"
|
|
|
|
+ "net/http"
|
|
|
|
+ "strconv"
|
|
|
|
+ "time"
|
|
|
|
+
|
|
|
|
+ "github.com/gin-gonic/gin"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+type KnowledgeUploadResp struct {
|
|
|
|
+ Ret int
|
|
|
|
+ Msg string
|
|
|
|
+ ErrMsg string `json:"-"`
|
|
|
|
+ Success bool `description:"true 执行成功,false 执行失败"`
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func ForwardRequest(c *gin.Context, targetURL string) (responseBody []byte, err error) {
|
|
|
|
+
|
|
|
|
+ form, err := c.MultipartForm()
|
|
|
|
+ if err != nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ body := new(bytes.Buffer)
|
|
|
|
+ writer := multipart.NewWriter(body)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ for _, files := range form.File {
|
|
|
|
+ for _, file := range files {
|
|
|
|
+ part, er := writer.CreateFormFile(file.Filename, file.Filename)
|
|
|
|
+ if er != nil {
|
|
|
|
+ err = er
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ fileContent, er := file.Open()
|
|
|
|
+ if er != nil {
|
|
|
|
+ err = er
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ _, er = io.Copy(part, fileContent)
|
|
|
|
+ if er != nil {
|
|
|
|
+ err = er
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ for k, v := range c.Request.PostForm {
|
|
|
|
+ for _, value := range v {
|
|
|
|
+ writer.WriteField(k, value)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ writer.Close()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ req, err := http.NewRequest(c.Request.Method, targetURL, body)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ req.Header.Set("Content-Type", writer.FormDataContentType())
|
|
|
|
+ nonce := utils.GetRandStringNoSpecialChar(32)
|
|
|
|
+ timeStamp := time.Now().UnixMilli() / 1000
|
|
|
|
+ signature := utils.GetSign(global.CONFIG.EtaReport.AppId, global.CONFIG.EtaReport.Secret, nonce, strconv.Itoa(int(timeStamp)))
|
|
|
|
+ req.Header.Set("nonce", utils.GetRandStringNoSpecialChar(32))
|
|
|
|
+ req.Header.Set("timestamp", strconv.Itoa(int(timeStamp)))
|
|
|
|
+ req.Header.Set("appid", global.CONFIG.EtaReport.AppId)
|
|
|
|
+ req.Header.Set("signature", signature)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ client := &http.Client{}
|
|
|
|
+ resp, err := client.Do(req)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ defer resp.Body.Close()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ responseBody, err = io.ReadAll(resp.Body)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ return
|
|
|
|
+}
|