aliyun.go 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package utils
  2. import (
  3. "bytes"
  4. "encoding/base64"
  5. "net/http"
  6. "strings"
  7. "time"
  8. "github.com/yl10/kit/guid"
  9. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  10. )
  11. // GetOssClient 获取 OSS 客户端
  12. func GetOssClient(endpoint, accessKeyID, accessKeySecret string) (*oss.Client, error) {
  13. return oss.New(endpoint, accessKeyID, accessKeySecret)
  14. }
  15. // UploadFileToBucket 简单上传文件
  16. func UploadFileToBucket(cli *oss.Client, req *http.Request, bucket, fromFront string, nameSuffix ...string) (string, error) {
  17. bkt, err := cli.Bucket(bucket)
  18. if err != nil {
  19. return "", err
  20. }
  21. file, fh, err := req.FormFile(fromFront)
  22. if err != nil {
  23. return "", err
  24. }
  25. defer file.Close()
  26. fname := fh.Filename
  27. if len(nameSuffix) > 0 && nameSuffix[0] != "" {
  28. fArr := strings.Split(fname, ".")
  29. fArr[0] = fArr[0] + nameSuffix[0]
  30. fname = strings.Join(fArr, ".")
  31. }
  32. err = bkt.PutObject(fname, file)
  33. if err != nil {
  34. return "", err
  35. }
  36. return strings.Join([]string{
  37. "http://",
  38. bucket + ".",
  39. cli.Config.Endpoint + "/",
  40. fname,
  41. }, ""), nil
  42. }
  43. // UploadStringToBucket 上传base64图片
  44. func UploadStringToBucket(cli *oss.Client, bucket, fromStr string) (string, error) {
  45. bkt, err := cli.Bucket(bucket)
  46. if err != nil {
  47. return "", err
  48. }
  49. imgName := guid.NewGUIDString() + "-" + time.Now().Local().Format("20060102150405")
  50. imgExt := ".jpg"
  51. switch getMIMEFromBase64(fromStr) {
  52. case "image/gif":
  53. imgExt = ".gif"
  54. case "image/bmp":
  55. imgExt = ".bmp"
  56. case "image/png", "image/x-png":
  57. imgExt = ".png"
  58. case "image/pipeg":
  59. imgExt = ".jfif"
  60. case "image/webp":
  61. imgExt = ".webp"
  62. }
  63. fName := imgName + imgExt
  64. imgData, err := base64.StdEncoding.DecodeString(strings.Split(fromStr, "base64,")[1])
  65. if err != nil {
  66. return "", err
  67. }
  68. err = bkt.PutObject(fName, bytes.NewBuffer(imgData))
  69. if err != nil {
  70. return "", err
  71. }
  72. return strings.Join([]string{
  73. "http://",
  74. bucket + ".",
  75. cli.Config.Endpoint + "/",
  76. fName,
  77. }, ""), nil
  78. }
  79. // utils
  80. // getMIMEFromBase64 获取 base64 字串中的 mime
  81. func getMIMEFromBase64(str string) string {
  82. g := strings.Split(str, ";")
  83. if len(g) < 2 {
  84. return ""
  85. }
  86. return strings.ToLower(strings.TrimLeft(g[0], "data:"))
  87. }