105 lines
3.1 KiB
Go
105 lines
3.1 KiB
Go
|
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
|
|||
|
}
|