123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- package svc
- import (
- "fmt"
- "git.i2edu.net/i2/i2-bill-api/internal/utils"
- "git.i2edu.net/i2/i2-bill-api/model"
- "github.com/aliyun/aliyun-oss-go-sdk/oss"
- "io"
- "mime/multipart"
- "path"
- "strings"
- "time"
- )
- var AliYunOss *AliYunOssUpDownloader
- type AliYunOssUpDownloader struct {
- bucket *oss.Bucket
- }
- func GetAliYunOssInstance() (*AliYunOssUpDownloader, error) {
- var err error
- if AliYunOss == nil {
- AliYunOss, err = newAliYunOssUpDownloader()
- }
- return AliYunOss, err
- }
- func newAliYunOssUpDownloader() (*AliYunOssUpDownloader, error) {
- // 创建OSSClient实例。
- client, err := oss.New(ServiceConfig.AliYunOss.EndPoint, ServiceConfig.AliYunOss.KeyId, ServiceConfig.AliYunOss.Secret)
- if err != nil {
- fmt.Println("Error:", err)
- return nil, err
- }
- // 获取存储空间。
- aliYunBucket, err := client.Bucket(ServiceConfig.AliYunOss.Bucket)
- if err != nil {
- fmt.Println("Error:", err)
- return nil, err
- }
- return &AliYunOssUpDownloader{bucket: aliYunBucket}, nil
- }
- /**
- * @brief: 附件上传接口
- * @param1 file: post 多媒体file
- * @return1: 附件信息,主要包括id,url, hash和大小。其他字段会自动设置
- * @return4: 错误信息
- */
- func (aoud *AliYunOssUpDownloader) Upload(file multipart.File, header *multipart.FileHeader) (*model.I2billSysAttachment, error) {
- attachId := utils.GetUUID()
- dateStr := time.Now().Format("2006/01/02")
- ext := strings.TrimSpace(path.Ext(header.Filename)) // 扩展名
- objectKey := ""
- if ext == "" {
- objectKey = fmt.Sprintf("customer/files/att/%s/%s", dateStr, attachId)
- } else {
- objectKey = fmt.Sprintf("customer/files/att/%s/%s%s", dateStr, attachId, ext)
- }
- err := aoud.bucket.PutObject(objectKey, file)
- if err != nil {
- fmt.Println("aoud.bucket.PutObject err", err.Error())
- return nil, err
- }
- attach := &model.I2billSysAttachment{}
- attach.Id = attachId
- attach.Url = objectKey
- attach.Hash = ""
- attach.Ext = ext
- attach.Name = header.Filename
- attach.Size = header.Size
- return attach, nil
- }
- func (aoud *AliYunOssUpDownloader) UploadRead(file io.Reader, ext string) (*model.I2billSysAttachment, error) {
- attachId := utils.GetUUID()
- dateStr := time.Now().Format("2006/01/02")
- objectKey := ""
- if ext == "" {
- objectKey = fmt.Sprintf("customer/files/att/%s/%s", dateStr, attachId)
- } else {
- objectKey = fmt.Sprintf("customer/files/att/%s/%s%s", dateStr, attachId, ext)
- }
- err := aoud.bucket.PutObject(objectKey, file)
- if err != nil {
- fmt.Println("aoud.bucket.PutObject err", err.Error())
- return nil, err
- }
- attach := &model.I2billSysAttachment{}
- attach.Id = attachId
- attach.Url = objectKey
- attach.Hash = ""
- attach.Ext = ext
- attach.Name = attachId
- attach.CreateTime = time.Now()
- return attach, nil
- }
- func (aoud *AliYunOssUpDownloader) Download(attach *model.I2billSysAttachment) (io.ReadCloser, error) {
- objectKey := attach.Url
- r, err := aoud.bucket.GetObject(objectKey)
- if err != nil {
- fmt.Println("aoud.bucket.GetObject 错误", err.Error())
- return r, err
- }
- defer r.Close()
- return r, nil
- }
|