有疑问或有错误的地方还请大家指出,本人菜鸟一枚~
go 使用官方sdk实现前端上传base64图片转byte上传到oss
func UploadBase64Img(imageData string, host string) (string, error) {
fmt.Println("UploadBase64Img OSS Go SDK Version: ", oss.Version)
if imageData == "" {
return "", errors.New("UploadBase64Img empty image data")
}
regex := regexp.MustCompile(`^(data:\s*image/(\w+);base64,)`)
result := regex.FindStringSubmatch(imageData)
var imgType string
if len(result) >= 3 {
imgType = result[2]
}
if imgType == "" {
return "", errors.New("failed to extract image type")
}
savePath := host + "/" + time.Now().Format("2006/01/02") + "/" + utils.BuildUUid("img") + "." + imgType
ddd, _ := base64.StdEncoding.DecodeString(extractBase64Data(imageData))
err := PutObjectFromByte(savePath, ddd)
if err != nil {
return "", err
}
return getHttpUrl(savePath), nil
}
imageData为base64原始数据,host为自定义参数
getHttpUtl为自定义的拼接返回完整文件路径
使用官方sdk上传
func PutObjectFromByte(objectName string, fBytes []byte) error {
bucketName := Viper.AppConf.AliyunOss.Bucket
// 填写存储空间名称,例如examplebucket。
bucket, err := Client.Bucket(bucketName)
if err != nil {
slog.Error("PutObjectFromByte set Bucket:", err.Error())
return err
}
// 将Byte数组上传至exampledir目录下的exampleobject.txt文件。
err = bucket.PutObject(objectName, bytes.NewReader(fBytes))
if err != nil {
slog.Error("PutObjectFromByte PutObject:", err.Error())
return err
}
return nil
}
// 提取Base64数据部分,去掉前缀
func extractBase64Data(base64String string) string {
// 找到逗号后的位置
index := 0
for i, char := range base64String {
if char == ',' {
index = i + 1
break
}
}
// 返回逗号后的部分
return base64String[index:]
}