feat: udpate upload content type

This commit is contained in:
yanghao05
2025-04-18 14:45:06 +08:00
parent 2854afec53
commit ac65302601
18 changed files with 228 additions and 23 deletions

View File

@@ -3,12 +3,15 @@ package admin
import (
"quyun/app/models"
"quyun/app/requests"
"quyun/providers/ali"
"github.com/gofiber/fiber/v3"
)
// @provider
type medias struct{}
type medias struct {
oss *ali.OSSClient
}
// List medias
// @Router /v1/admin/medias [get]
@@ -18,3 +21,20 @@ func (ctl *medias) List(ctx fiber.Ctx, pagination *requests.Pagination, query *L
cond := models.Medias.BuildConditionWithKey(query.Keyword)
return models.Medias.List(ctx.Context(), pagination, cond)
}
// Show media
// @Router /v1/admin/medias/:id [get]
// @Bind id path
func (ctl *medias) Show(ctx fiber.Ctx, id int64) error {
media, err := models.Medias.GetByID(ctx.Context(), id)
if err != nil {
return ctx.SendString("Media not found")
}
url, err := ctl.oss.GetSignedUrl(ctx.Context(), media.Path)
if err != nil {
return err
}
return ctx.Redirect().To(url)
}

View File

@@ -28,6 +28,7 @@ func (ctl *posts) List(ctx fiber.Ctx, pagination *requests.Pagination, query *Li
type PostForm struct {
Title string `json:"title"`
HeadImage int64 `json:"head_image"`
Price int64 `json:"price"`
Discount int16 `json:"discount"`
Introduction string `json:"introduction"`

View File

@@ -23,8 +23,12 @@ func Provide(opts ...opt.Option) error {
}); err != nil {
return err
}
if err := container.Container.Provide(func() (*medias, error) {
obj := &medias{}
if err := container.Container.Provide(func(
oss *ali.OSSClient,
) (*medias, error) {
obj := &medias{
oss: oss,
}
return obj, nil
}); err != nil {

View File

@@ -45,6 +45,11 @@ func (r *Routes) Register(router fiber.Router) {
Query[ListQuery]("query"),
))
router.Get("/v1/admin/medias/:id", Func1(
r.medias.Show,
PathParam[int64]("id"),
))
// 注册路由组: orders
router.Get("/v1/admin/orders", DataFunc2(
r.orders.List,
@@ -81,10 +86,11 @@ func (r *Routes) Register(router fiber.Router) {
))
// 注册路由组: uploads
router.Get("/v1/admin/uploads/pre-uploaded-check/:md5.:ext", DataFunc2(
router.Get("/v1/admin/uploads/pre-uploaded-check/:md5.:ext", DataFunc3(
r.uploads.PreUploadCheck,
PathParam[string]("md5"),
PathParam[string]("ext"),
QueryParam[string]("mime"),
))
router.Post("/v1/admin/uploads/post-uploaded-action", Func1(

View File

@@ -32,10 +32,11 @@ type PreCheckResp struct {
// @Router /v1/admin/uploads/pre-uploaded-check/:md5.:ext [get]
// @Bind md5 path
// @Bind ext path
func (up *uploads) PreUploadCheck(ctx fiber.Ctx, md5, ext string) (*PreCheckResp, error) {
// @Bind mime query
func (up *uploads) PreUploadCheck(ctx fiber.Ctx, md5, ext, mime string) (*PreCheckResp, error) {
_, err := models.Medias.GetByHash(ctx.Context(), md5)
if err != nil && errors.Is(err, qrm.ErrNoRows) {
preSign, err := up.oss.PreSignUpload(ctx.Context(), fmt.Sprintf("%s.%s", md5, ext))
preSign, err := up.oss.PreSignUpload(ctx.Context(), fmt.Sprintf("%s.%s", md5, ext), mime)
if err != nil {
return nil, err
}