初始
This commit is contained in:
104
api/v1/common/coryCommon/base64ToImg.go
Normal file
104
api/v1/common/coryCommon/base64ToImg.go
Normal file
@ -0,0 +1,104 @@
|
||||
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
|
||||
}
|
Reference in New Issue
Block a user