go 实现base64图片上传功能

174 阅读1分钟

有疑问或有错误的地方还请大家指出,本人菜鸟一枚~

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:]
}