From 69f08415fce78bce8c977e1510bdcf699c9f5356 Mon Sep 17 00:00:00 2001 From: Hiven Date: Tue, 15 Aug 2023 18:35:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E9=87=8D=E6=9E=84=E5=90=88=E5=9B=BE?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../upload/internal/logic/uploadlogologic.go | 47 +++++++++++++++++-- service/repositories/image_handle.go | 28 +++++++++-- utils/basic/basic.go | 7 +-- 3 files changed, 70 insertions(+), 12 deletions(-) diff --git a/server/upload/internal/logic/uploadlogologic.go b/server/upload/internal/logic/uploadlogologic.go index 88744393..1c51eb22 100644 --- a/server/upload/internal/logic/uploadlogologic.go +++ b/server/upload/internal/logic/uploadlogologic.go @@ -2,6 +2,7 @@ package logic import ( "encoding/json" + "errors" "fusenapi/model/gmodel" "fusenapi/utils/auth" "fusenapi/utils/basic" @@ -69,11 +70,29 @@ func (l *UploadLogoLogic) UploadLogo(req *types.UploadLogoReq, userinfo *auth.Us //设置内存大小 l.r.ParseMultipartForm(32 << 20) - fileObject, _, err := l.r.FormFile("file") + fileObject, fileHeader, err := l.r.FormFile("file") if err != nil { logx.Error(err) return resp.SetStatus(basic.CodeFileUploadErr, "file upload err,no files") } + defer fileObject.Close() + + // 获取文件的MIME类型 + fileType := fileHeader.Header.Get("Content-Type") + var imageTypes = make(map[string]struct{}, 7) + imageTypes["image/jpg"] = struct{}{} + imageTypes["image/jpeg"] = struct{}{} + imageTypes["image/png"] = struct{}{} + imageTypes["image/gif"] = struct{}{} + imageTypes["image/bmp"] = struct{}{} + imageTypes["image/tiff"] = struct{}{} + imageTypes["image/webp"] = struct{}{} + imageTypes["image/svg+xml"] = struct{}{} + // 判断文件类型是否为图片 + _, ok := imageTypes[fileType] + if !ok { + return resp.SetStatus(basic.CodeFileUploadErr, "file upload err,file is not image") + } // 读取数据流 ioData, err := io.ReadAll(fileObject) @@ -143,10 +162,30 @@ func (l *UploadLogoLogic) UploadLogo(req *types.UploadLogoReq, userinfo *auth.Us logx.Error(err) return resp.SetStatus(basic.CodeFileUploadLogoErr, "service fail") } - resultStr = string(b) - if resultStr == "Internal Server Error" { - return resp.SetStatus(basic.CodeFileUploadLogoErr, resultStr) + if string(b) == "Internal Server Error" { + err = errors.New("BLMService fail Internal Server Error") + logx.Error(err) + return resp.SetStatus(basic.CodeFileUploadLogoErr, "service fail") + } else { + var resData map[string]interface{} + err = json.Unmarshal(b, &resData) + if err != nil || resData == nil { + logx.Error(err) + return resp.SetStatus(basic.CodeFileUploadLogoErr, "service fail") + } + + if resData != nil { + if resData["code"].(string) == "200" { + resultStr = resData["data"].(string) + } else { + logx.Error(err) + return resp.SetStatus(basic.CodeFileUploadLogoErrType, "service fail") + } + } else { + logx.Error(err) + return resp.SetStatus(basic.CodeFileUploadLogoErr, "service fail") + } } var module = "logo" diff --git a/service/repositories/image_handle.go b/service/repositories/image_handle.go index d751b8af..861a9f1e 100644 --- a/service/repositories/image_handle.go +++ b/service/repositories/image_handle.go @@ -165,17 +165,35 @@ func (l *defaultImageHandle) LogoCombine(ctx context.Context, in *LogoCombineReq logx.Error(err) return nil, err } - ress := string(b) - - if ress == "Internal Server Error" { + var resultStr string + if string(b) == "Internal Server Error" { err = errors.New("BLMService fail Internal Server Error") logx.Error(err) return nil, err + } else { + var resData map[string]interface{} + err = json.Unmarshal(b, &resData) + if err != nil || resData == nil { + logx.Error(err) + return nil, err + } + + if resData != nil { + if resData["code"].(string) == "200" { + resultStr = resData["data"].(string) + } else { + logx.Error(err) + return nil, err + } + } else { + logx.Error(err) + return nil, err + } } var resultData map[string]interface{} - err = json.Unmarshal(b, &resultData) - if err != nil { + err = json.Unmarshal([]byte(resultStr), &resultData) + if err != nil || resultData == nil { logx.Error(err) return nil, err } diff --git a/utils/basic/basic.go b/utils/basic/basic.go index d5d99288..cb69830e 100644 --- a/utils/basic/basic.go +++ b/utils/basic/basic.go @@ -77,9 +77,10 @@ var ( CodeAesCbcEncryptionErr = &StatusResponse{5106, "encryption data err"} // 加密数据失败 CodeAesCbcDecryptionErr = &StatusResponse{5107, "decryption data err"} // 解密数据失败 - CodeFileUploadErr = &StatusResponse{5110, "file upload err"} // 文件上传失败 - CodeFileUploadLogoErr = &StatusResponse{5111, "logo upload err"} // 用户上传LOGO失败 - CodeFileLogoCombineErr = &StatusResponse{5112, "logo upload err"} // 用户合图失败 + CodeFileUploadErr = &StatusResponse{5110, "file upload err"} // 文件上传失败 + CodeFileUploadLogoErr = &StatusResponse{5111, "logo upload err"} // 用户上传LOGO失败 + CodeFileUploadLogoErrType = &StatusResponse{5111, "logo upload err file is not image"} // 用户上位LOGO失败"} + CodeFileLogoCombineErr = &StatusResponse{5112, "logo upload err"} // 用户合图失败 ) type Response struct {