From 817e34c6aaeac4f57ec66ec9c640eef9b5e4f866 Mon Sep 17 00:00:00 2001 From: wenjianzhang Date: Sun, 13 Apr 2025 22:20:06 +0800 Subject: [PATCH] =?UTF-8?q?refactor=F0=9F=8E=A8:=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E6=8B=86=E5=88=86=E5=A4=84=E7=90=86=E5=87=BD=E6=95=B0=E4=BB=A5?= =?UTF-8?q?=E6=8F=90=E9=AB=98=E5=8F=AF=E8=AF=BB=E6=80=A7=E5=92=8C=E7=BB=B4?= =?UTF-8?q?=E6=8A=A4=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/other/apis/file.go | 163 ++++++++++++++++++++--------------------- 1 file changed, 78 insertions(+), 85 deletions(-) diff --git a/app/other/apis/file.go b/app/other/apis/file.go index e0d77f42..94d2ec76 100644 --- a/app/other/apis/file.go +++ b/app/other/apis/file.go @@ -45,62 +45,60 @@ func (e File) UploadFile(c *gin.Context) { e.MakeContext(c) tag, _ := c.GetPostForm("type") urlPrefix := fmt.Sprintf("%s://%s/", "http", c.Request.Host) - var fileResponse FileResponse switch tag { case "1": // 单图 - var done bool - fileResponse, done = e.singleFile(c, fileResponse, urlPrefix) - if done { - return - } - e.OK(fileResponse, "上传成功") - return + e.handleSingleFile(c, urlPrefix) case "2": // 多图 - multipartFile := e.multipleFile(c, urlPrefix) - e.OK(multipartFile, "上传成功") - return + e.handleMultipleFiles(c, urlPrefix) case "3": // base64 - fileResponse = e.baseImg(c, fileResponse, urlPrefix) - e.OK(fileResponse, "上传成功") + e.handleBase64File(c, urlPrefix) default: - var done bool - fileResponse, done = e.singleFile(c, fileResponse, urlPrefix) - if done { - return - } - e.OK(fileResponse, "上传成功") - return + e.handleSingleFile(c, urlPrefix) } - } -func (e File) baseImg(c *gin.Context, fileResponse FileResponse, urlPerfix string) FileResponse { +func (e File) handleSingleFile(c *gin.Context, urlPrefix string) { + fileResponse, done := e.singleFile(c, FileResponse{}, urlPrefix) + if done { + return + } + e.OK(fileResponse, "上传成功") +} + +func (e File) handleMultipleFiles(c *gin.Context, urlPrefix string) { + multipartFile := e.multipleFile(c, urlPrefix) + e.OK(multipartFile, "上传成功") +} + +func (e File) handleBase64File(c *gin.Context, urlPrefix string) { + fileResponse := e.baseImg(c, FileResponse{}, urlPrefix) + e.OK(fileResponse, "上传成功") +} + +func (e File) baseImg(c *gin.Context, fileResponse FileResponse, urlPrefix string) FileResponse { files, _ := c.GetPostForm("file") file2list := strings.Split(files, ",") - ddd, _ := base64.StdEncoding.DecodeString(file2list[1]) - guid := uuid.New().String() - fileName := guid + ".jpg" - err := utils.IsNotExistMkDir(path) - if err != nil { + decodedData, _ := base64.StdEncoding.DecodeString(file2list[1]) + fileName := uuid.New().String() + ".jpg" + + if err := utils.IsNotExistMkDir(path); err != nil { e.Error(500, errors.New(""), "初始化文件路径失败") + return fileResponse } + base64File := path + fileName - _ = ioutil.WriteFile(base64File, ddd, 0666) + _ = ioutil.WriteFile(base64File, decodedData, 0666) typeStr := strings.Replace(strings.Replace(file2list[0], "data:", "", -1), ";base64", "", -1) - fileResponse = FileResponse{ - Size: pkg.GetFileSize(base64File), - Path: base64File, - FullPath: urlPerfix + base64File, - Name: "", - Type: typeStr, - } + + fileResponse = e.buildFileResponse(base64File, urlPrefix, "", typeStr) source, _ := c.GetPostForm("source") - err = thirdUpload(source, fileName, base64File) - if err != nil { + + if err := thirdUpload(source, fileName, base64File); err != nil { e.Error(200, errors.New(""), "上传第三方失败") return fileResponse } + if source != "1" { fileResponse.Path = "/static/uploadfile/" + fileName fileResponse.FullPath = "/static/uploadfile/" + fileName @@ -108,81 +106,76 @@ func (e File) baseImg(c *gin.Context, fileResponse FileResponse, urlPerfix strin return fileResponse } -func (e File) multipleFile(c *gin.Context, urlPerfix string) []FileResponse { +func (e File) multipleFile(c *gin.Context, urlPrefix string) []FileResponse { files := c.Request.MultipartForm.File["file"] source, _ := c.GetPostForm("source") var multipartFile []FileResponse - for _, f := range files { - guid := uuid.New().String() - fileName := guid + utils.GetExt(f.Filename) - err := utils.IsNotExistMkDir(path) - if err != nil { + for _, f := range files { + fileName := uuid.New().String() + utils.GetExt(f.Filename) + + if err := utils.IsNotExistMkDir(path); err != nil { e.Error(500, errors.New(""), "初始化文件路径失败") + continue } + multipartFileName := path + fileName - err1 := c.SaveUploadedFile(f, multipartFileName) - fileType, _ := utils.GetType(multipartFileName) - if err1 == nil { - err := thirdUpload(source, fileName, multipartFileName) - if err != nil { - e.Error(500, errors.New(""), "上传第三方失败") - } else { - fileResponse := FileResponse{ - Size: pkg.GetFileSize(multipartFileName), - Path: multipartFileName, - FullPath: urlPerfix + multipartFileName, - Name: f.Filename, - Type: fileType, - } - if source != "1" { - fileResponse.Path = "/static/uploadfile/" + fileName - fileResponse.FullPath = "/static/uploadfile/" + fileName - } - multipartFile = append(multipartFile, fileResponse) - } + if err := c.SaveUploadedFile(f, multipartFileName); err != nil { + continue } + + fileType, _ := utils.GetType(multipartFileName) + if err := thirdUpload(source, fileName, multipartFileName); err != nil { + e.Error(500, errors.New(""), "上传第三方失败") + continue + } + + fileResponse := e.buildFileResponse(multipartFileName, urlPrefix, f.Filename, fileType) + if source != "1" { + fileResponse.Path = "/static/uploadfile/" + fileName + fileResponse.FullPath = "/static/uploadfile/" + fileName + } + multipartFile = append(multipartFile, fileResponse) } return multipartFile } -func (e File) singleFile(c *gin.Context, fileResponse FileResponse, urlPerfix string) (FileResponse, bool) { +func (e File) singleFile(c *gin.Context, fileResponse FileResponse, urlPrefix string) (FileResponse, bool) { files, err := c.FormFile("file") - if err != nil { e.Error(200, errors.New(""), "图片不能为空") return FileResponse{}, true } - // 上传文件至指定目录 - guid := uuid.New().String() - fileName := guid + utils.GetExt(files.Filename) - - err = utils.IsNotExistMkDir(path) - if err != nil { + fileName := uuid.New().String() + utils.GetExt(files.Filename) + if err := utils.IsNotExistMkDir(path); err != nil { e.Error(500, errors.New(""), "初始化文件路径失败") + return FileResponse{}, true } + singleFile := path + fileName - _ = c.SaveUploadedFile(files, singleFile) - fileType, _ := utils.GetType(singleFile) - fileResponse = FileResponse{ - Size: pkg.GetFileSize(singleFile), - Path: singleFile, - FullPath: urlPerfix + singleFile, - Name: files.Filename, - Type: fileType, + if err := c.SaveUploadedFile(files, singleFile); err != nil { + e.Error(500, errors.New(""), "文件保存失败") + return FileResponse{}, true } - //source, _ := c.GetPostForm("source") - //err = thirdUpload(source, fileName, singleFile) - //if err != nil { - // e.Error(200, errors.New(""), "上传第三方失败") - // return FileResponse{}, true - //} + + fileType, _ := utils.GetType(singleFile) + fileResponse = e.buildFileResponse(singleFile, urlPrefix, files.Filename, fileType) fileResponse.Path = "/static/uploadfile/" + fileName fileResponse.FullPath = "/static/uploadfile/" + fileName return fileResponse, false } +func (e File) buildFileResponse(filePath, urlPrefix, fileName, fileType string) FileResponse { + return FileResponse{ + Size: pkg.GetFileSize(filePath), + Path: filePath, + FullPath: urlPrefix + filePath, + Name: fileName, + Type: fileType, + } +} + func thirdUpload(source string, name string, path string) error { switch source { case "2":