| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package logic
- import (
- "context"
- "errors"
- "fmt"
- "io"
- "mime/multipart"
- "strings"
- "time"
- "slow_wild_api/apps/internal/svc"
- "slow_wild_api/apps/internal/types"
- "slow_wild_api/apps/internal/utils"
- "github.com/tencentyun/cos-go-sdk-v5"
- "github.com/zeromicro/go-zero/core/logx"
- )
- type AttachmentUploadLogic struct {
- logx.Logger
- ctx context.Context
- svcCtx *svc.ServiceContext
- }
- func NewAttachmentUploadLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AttachmentUploadLogic {
- return &AttachmentUploadLogic{
- Logger: logx.WithContext(ctx),
- ctx: ctx,
- svcCtx: svcCtx,
- }
- }
- func (l *AttachmentUploadLogic) AttachmentUpload(fileIO multipart.File, header *multipart.FileHeader) (resp *types.BaseReturnData, err error) {
- resp = &types.BaseReturnData{}
- contentData, err := io.ReadAll(fileIO)
- if err != nil {
- return
- }
- // 读取文件的流,用文件流加密成MD5, 如果文件不更改的话MD5不变,减少cos使用
- fileName := utils.Str2MD5(contentData, "paopao-im-aghbslsghslk346300basbdja2313241")
- oldFileName := header.Filename
- splits := strings.Split(oldFileName, ".")
- if len(splits) < 2 {
- err = errors.New("文件上传失败")
- return
- }
- fileName += "." + splits[len(splits)-1]
- year := time.Now().Year()
- month := time.Now().Month()
- path := fmt.Sprintf("%d/%d/%s", year, month, fileName)
- objectAclOption := &cos.ObjectPutOptions{}
- _, err = l.svcCtx.TencentCos.Object.Put(l.ctx, path, strings.NewReader(string(contentData)), objectAclOption)
- if err != nil {
- return
- }
- resp.Data = map[string]string{
- "url": fmt.Sprintf("%s/%s", l.svcCtx.TencentCos.BaseURL.BucketURL, path),
- }
- return
- }
|