aliyun_oss.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package global
  2. import (
  3. "fmt"
  4. "git.i2edu.net/i2/i2-bill-api/internal/svc"
  5. "git.i2edu.net/i2/i2-bill-api/internal/utils"
  6. "git.i2edu.net/i2/i2-bill-api/model"
  7. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  8. "io"
  9. "mime/multipart"
  10. "path"
  11. "strings"
  12. "time"
  13. )
  14. var aliYunBucket *oss.Bucket
  15. type AliYunOssUpDownloader struct {
  16. bucket *oss.Bucket
  17. }
  18. func NewAliYunOssUpDownloader() *AliYunOssUpDownloader {
  19. // 创建OSSClient实例。
  20. client, err := oss.New(svc.ServiceConfig.AliYunOss.EndPoint, svc.ServiceConfig.AliYunOss.KeyId, svc.ServiceConfig.AliYunOss.Secret)
  21. if err != nil {
  22. fmt.Println("Error:", err)
  23. return nil
  24. }
  25. // 获取存储空间。
  26. aliYunBucket, err = client.Bucket(svc.ServiceConfig.AliYunOss.Bucket)
  27. if err != nil {
  28. fmt.Println("Error:", err)
  29. return nil
  30. }
  31. return &AliYunOssUpDownloader{bucket: aliYunBucket}
  32. }
  33. /**
  34. * @brief: 附件上传接口
  35. * @param1 file: post 多媒体file
  36. * @return1: 附件信息,主要包括id,url, hash和大小。其他字段会自动设置
  37. * @return4: 错误信息
  38. */
  39. func (aoud *AliYunOssUpDownloader) Upload(file multipart.File, header *multipart.FileHeader) (*model.I2billSysAttachment, error) {
  40. attachId := utils.GetUUID()
  41. dateStr := time.Now().Format("2006/01/02")
  42. ext := strings.TrimSpace(path.Ext(header.Filename)) // 扩展名
  43. objectKey := ""
  44. if ext == "" {
  45. objectKey = fmt.Sprintf("customer/files/att/%s/%s", dateStr, attachId)
  46. } else {
  47. objectKey = fmt.Sprintf("customer/files/att/%s/%s%s", dateStr, attachId, ext)
  48. }
  49. err := aoud.bucket.PutObject(objectKey, file)
  50. if err != nil {
  51. fmt.Println("aoud.bucket.PutObject err", err.Error())
  52. return nil, err
  53. }
  54. attach := &model.I2billSysAttachment{}
  55. attach.Id = attachId
  56. attach.Url = objectKey
  57. attach.Hash = ""
  58. attach.Size = header.Size
  59. return attach, nil
  60. }
  61. func (aoud *AliYunOssUpDownloader) UploadRead(file io.Reader, ext string) (*model.I2billSysAttachment, error) {
  62. attachId := utils.GetUUID()
  63. dateStr := time.Now().Format("2006/01/02")
  64. objectKey := ""
  65. if ext == "" {
  66. objectKey = fmt.Sprintf("customer/files/att/%s/%s", dateStr, attachId)
  67. } else {
  68. objectKey = fmt.Sprintf("customer/files/att/%s/%s%s", dateStr, attachId, ext)
  69. }
  70. err := aoud.bucket.PutObject(objectKey, file)
  71. if err != nil {
  72. fmt.Println("aoud.bucket.PutObject err", err.Error())
  73. return nil, err
  74. }
  75. attach := &model.I2billSysAttachment{}
  76. attach.Id = attachId
  77. attach.Url = objectKey
  78. attach.Hash = ""
  79. return attach, nil
  80. }
  81. func (aoud *AliYunOssUpDownloader) Download(attach *model.I2billSysAttachment) (io.ReadCloser, error) {
  82. objectKey := attach.Url
  83. r, err := aoud.bucket.GetObject(objectKey)
  84. if err != nil {
  85. fmt.Println("aoud.bucket.GetObject 错误", err.Error())
  86. return r, err
  87. }
  88. defer r.Close()
  89. return r, nil
  90. }