55 lines
1.5 KiB
Go
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{}
|
|
}
|