package coryCommon import ( "encoding/base64" "errors" "fmt" "github.com/gogf/gf/v2/os/gfile" "io/ioutil" "math/rand" "os" "path/filepath" "strings" "time" ) // Base64ToImgFunc 将base64转成图片保存在本地 func Base64ToImgFunc(base64Str string, numTyoe string, cdPath string) (outputPath string, err error) { // 获取当前时间+随机数得到文件名 currentTime := time.Now() timestamp := currentTime.UnixNano() / int64(time.Millisecond) randomNum := rand.Intn(1000) uniqueFileName := fmt.Sprintf("%d_%d", timestamp, randomNum) // 用户指定的本地文件路径 //ynr := Ynr(Portrait + "/") ynr := Ynr(cdPath + "/") path := ynr + uniqueFileName + ".png" path = filepath.ToSlash(path) // Base64编码的图像字符串 b64 := "data:image/png;" base64Image := "" if strings.Contains(base64Str, "base64,") { // 判断是否有【base64,】如果有就替换 base64Image = strings.Replace(base64Str, base64Str[:strings.Index(base64Str, "base64,")], b64, 1) } else { base64Image = b64 + "base64," + base64Str } // 调用函数将Base64图像保存到指定路径 err = SaveBase64ImageToFile(base64Image, path) if err != nil { return } else { if numTyoe == "1" { outputPath = strings.Replace(path, "resource/public", "file", 1) return } else if numTyoe == "2" { outputPath = strings.Replace(path, "resource/public", "wxfile", 1) return } else { err = errors.New("第二参数只能为1 or 2!") return } } } func Base64ToFileFunc(base64Str string, filePath string, suffix string, numTyoe string) (outputPath string, err error) { // 获取当前时间+随机数得到文件名 timestamp := time.Now().UnixNano() / int64(time.Millisecond) uniqueFileName := fmt.Sprintf("%d_%d", timestamp, rand.Intn(1000)) // 用户指定的本地文件路径,filePath路径最后必须是/ path := filepath.ToSlash(filePath + uniqueFileName + suffix) // 调用函数将Base64图像保存到指定路径 err = SaveBase64ImageToFile(base64Str, path) if err != nil { return } else { if numTyoe == "1" { outputPath = strings.Replace(path, "resource/public", "file", 1) return } else if numTyoe == "2" { outputPath = strings.Replace(path, "resource/public", "wxfile", 1) return } else { err = errors.New("第二参数只能为1 or 2!") return } } } // SaveBase64ImageToFile 将Base64编码的图像保存到指定的本地文件路径 func SaveBase64ImageToFile(base64Image string, outputPath string) error { if len(outputPath) > 0 && outputPath[0] == '/' { outputPath = outputPath[1:] } getwd, _ := os.Getwd() outputPath = gfile.Join(getwd, outputPath) outputPath = strings.ReplaceAll(outputPath, "\\", "/") // 1. 解码Base64字符串 parts := strings.Split(base64Image, ",") if len(parts) != 2 { return errors.New("Base64字符串格式不正确!") } data, err := base64.StdEncoding.DecodeString(parts[1]) if err != nil { return errors.New("转码错误!") } // 2. 将字节数组保存为图像文件 err = ioutil.WriteFile(outputPath, data, 0644) if err != nil { return errors.New("报错图像失败!") } return nil }