diff --git a/api/Dockerfile b/api/Dockerfile index 3c78b3fd..a27e861c 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.22-alpine3.18 AS builder +FROM golang:1.22.4-alpine3.20 AS builder WORKDIR /app @@ -9,7 +9,7 @@ RUN go env -w GO111MODULE=on \ && go env -w CGO_ENABLED=0 RUN go build -o pcm-coordinator-api /app/api/pcm.go -FROM alpine:3.18 +FROM alpine:3.20 WORKDIR /app diff --git a/api/internal/logic/inference/imageinferencelogic.go b/api/internal/logic/inference/imageinferencelogic.go index 5f09a84e..ec40d60d 100644 --- a/api/internal/logic/inference/imageinferencelogic.go +++ b/api/internal/logic/inference/imageinferencelogic.go @@ -1,12 +1,8 @@ package inference import ( - "bytes" "context" - "crypto/tls" "errors" - "fmt" - "github.com/JCCE-nudt/apigw-go-sdk/core" "github.com/go-resty/resty/v2" "github.com/zeromicro/go-zero/core/logx" "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/scheduler/schedulers/option" @@ -16,7 +12,7 @@ import ( "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/constants" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/models" - "io" + "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils" "k8s.io/apimachinery/pkg/util/json" "log" "math/rand" @@ -464,7 +460,19 @@ func getInferResult(url string, file multipart.File, fileName string, clusterNam func getInferResultModelarts(url string, file multipart.File, fileName string) (string, error) { var res Res - body, err := SendRequest("POST", url, file, fileName) + /* req := GetRestyRequest(20) + _, err := req. + SetFileReader("file", fileName, file). + SetHeaders(map[string]string{ + "ak": "UNEHPHO4Z7YSNPKRXFE4", + "sk": "JWXCE9qcYbc7RjpSRIWt4WgG3ZKF6Q4lPzkJReX9", + }). + SetResult(&res). + Post(url) + if err != nil { + return "", err + }*/ + body, err := utils.SendRequest("POST", url, file, fileName) if err != nil { return "", err } @@ -472,83 +480,9 @@ func getInferResultModelarts(url string, file multipart.File, fileName string) ( if errjson != nil { log.Fatalf("Error parsing JSON: %s", errjson) } - return res.Result, nil } -// SignClient AK/SK签名认证 -func SignClient(r *http.Request, writer *multipart.Writer) (*http.Client, error) { - r.Header.Add("content-type", "application/json;charset=UTF-8") - r.Header.Add("X-Project-Id", "d18190e28e3f45a281ef0b0696ec9d52") - r.Header.Add("x-stage", "RELEASE") - r.Header.Add("x-sdk-content-sha256", "UNSIGNED-PAYLOAD") - r.Header.Set("Content-Type", writer.FormDataContentType()) - s := core.Signer{ - Key: "UNEHPHO4Z7YSNPKRXFE4", - Secret: "JWXCE9qcYbc7RjpSRIWt4WgG3ZKF6Q4lPzkJReX9", - } - err := s.Sign(r) - if err != nil { - return nil, err - } - - //设置client信任所有证书 - tr := &http.Transport{ - TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, - } - client := &http.Client{ - Transport: tr, - } - return client, nil -} - -func SendRequest(method, url string, file multipart.File, fileName string) (string, error) { - /*body := &bytes.Buffer{} - writer := multipart.NewWriter(body)*/ - // 创建一个新的缓冲区以写入multipart表单 - var body bytes.Buffer - // 创建一个新的multipart writer - writer := multipart.NewWriter(&body) - // 创建一个用于写入文件的表单字段 - part, err := writer.CreateFormFile("file", fileName) // "file"是表单的字段名,第二个参数是文件名 - if err != nil { - fmt.Println("Error creating form file:", err) - } - // 将文件的内容拷贝到multipart writer中 - _, err = io.Copy(part, file) - if err != nil { - fmt.Println("Error copying file data:", err) - - } - err = writer.Close() - if err != nil { - fmt.Println("Error closing multipart writer:", err) - } - request, err := http.NewRequest(method, url, &body) - if err != nil { - fmt.Println("Error creating new request:", err) - //return nil, err - } - signedR, err := SignClient(request, writer) - if err != nil { - fmt.Println("Error signing request:", err) - //return nil, err - } - - res, err := signedR.Do(request) - if err != nil { - fmt.Println("Error sending request:", err) - return "", err - } - //defer res.Body.Close() - Resbody, err := io.ReadAll(res.Body) - if err != nil { - fmt.Println("Error reading response body:", err) - //return nil, err - } - return string(Resbody), nil -} - func GetRestyRequest(timeoutSeconds int64) *resty.Request { client := resty.New().SetTimeout(time.Duration(timeoutSeconds) * time.Second) request := client.R() diff --git a/pkg/utils/aksk_sign.go b/pkg/utils/aksk_sign.go new file mode 100644 index 00000000..a511129f --- /dev/null +++ b/pkg/utils/aksk_sign.go @@ -0,0 +1,84 @@ +package utils + +import ( + "bytes" + "crypto/tls" + "fmt" + "github.com/JCCE-nudt/apigw-go-sdk/core" + "io" + "mime/multipart" + "net/http" +) + +// SignClient AK/SK签名认证 +func SignClient(r *http.Request, writer *multipart.Writer) (*http.Client, error) { + r.Header.Add("content-type", "application/json;charset=UTF-8") + r.Header.Add("X-Project-Id", "d18190e28e3f45a281ef0b0696ec9d52") + r.Header.Add("x-stage", "RELEASE") + r.Header.Add("x-sdk-content-sha256", "UNSIGNED-PAYLOAD") + //r.Header.Set("Content-Type", writer.FormDataContentType()) + s := core.Signer{ + Key: "UNEHPHO4Z7YSNPKRXFE4", + Secret: "JWXCE9qcYbc7RjpSRIWt4WgG3ZKF6Q4lPzkJReX9", + } + err := s.Sign(r) + if err != nil { + return nil, err + } + + //设置client信任所有证书 + tr := &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + } + client := &http.Client{ + Transport: tr, + } + return client, nil +} + +func SendRequest(method, url string, file multipart.File, fileName string) (string, error) { + /*body := &bytes.Buffer{} + writer := multipart.NewWriter(body)*/ + // 创建一个新的缓冲区以写入multipart表单 + var body bytes.Buffer + // 创建一个新的multipart writer + writer := multipart.NewWriter(&body) + // 创建一个用于写入文件的表单字段 + part, err := writer.CreateFormFile("file", fileName) // "file"是表单的字段名,第二个参数是文件名 + if err != nil { + fmt.Println("Error creating form file:", err) + } + // 将文件的内容拷贝到multipart writer中 + _, err = io.Copy(part, file) + if err != nil { + fmt.Println("Error copying file data:", err) + + } + err = writer.Close() + if err != nil { + fmt.Println("Error closing multipart writer:", err) + } + request, err := http.NewRequest(method, url, &body) + if err != nil { + fmt.Println("Error creating new request:", err) + //return nil, err + } + signedR, err := SignClient(request, writer) + if err != nil { + fmt.Println("Error signing request:", err) + //return nil, err + } + + res, err := signedR.Do(request) + if err != nil { + fmt.Println("Error sending request:", err) + return "", err + } + //defer res.Body.Close() + Resbody, err := io.ReadAll(res.Body) + if err != nil { + fmt.Println("Error reading response body:", err) + //return nil, err + } + return string(Resbody), nil +}