Files
likedream/internal/service/cpdaily/cpimage.go
T
2025-11-06 16:27:41 +08:00

55 lines
1.5 KiB
Go

package cpdaily
import (
"context"
"io"
v1 "likedream-goframe/internal/api/v1"
"likedream-goframe/internal/application/filestorage"
"likedream-goframe/internal/db"
"likedream-goframe/internal/ent/cpimage"
"likedream-goframe/internal/utils"
"github.com/gogf/gf/v2/frame/g"
"github.com/google/uuid"
"github.com/samber/oops"
)
type CpImageServiceV1 struct {
}
func (v CpImageServiceV1) Upload(ctx context.Context, req *v1.UploadImageReq) *utils.Response[any] {
user := utils.GetUserInfoFromCtx(ctx)
file := req.File
open, err := file.Open()
utils.OkOrPanic(err, oops.WithContext(ctx).Wrap)
key := utils.GenerateFileName("cpdaily/")
filestorage.GlobalS3.UploadFile(ctx, key, open)
img := db.Global.CpImage.Create().
SetUserID(user.ID).
SetKey(key).
SetContentType(file.Header.Get("Content-Type")).
SetContentLength(file.Size).
SaveX(ctx)
return utils.SuccessWithData[any](v1.UploadImageRes{
FileKey: img.ImageID.String(),
FileSize: &file.Size,
})
}
func (v CpImageServiceV1) Preview(ctx context.Context, req *v1.PreviewImageReq) *utils.Response[any] {
id, err := uuid.Parse(req.Key)
utils.OkOrPanic(err, oops.WithContext(ctx).Wrap)
cpImage := db.Global.CpImage.Query().Where(cpimage.ImageID(id)).OnlyX(ctx)
file := filestorage.GlobalS3.GetFile(ctx, cpImage.Key)
r := g.RequestFromCtx(ctx)
r.Response.Header().Set("Content-Type", "image/png")
// 将文件写入
io.Copy(r.Response.Writer, file)
r.Exit()
return nil
}
func NewCpImageServiceV1() *CpImageServiceV1 {
return &CpImageServiceV1{}
}