实现文件上传

This commit is contained in:
2026-06-06 17:22:01 +08:00
parent 1b39b2d411
commit b00782b3f6
10 changed files with 398 additions and 7 deletions

View File

@@ -1,10 +1,12 @@
package handlers
import (
"platform/pkg/env"
"platform/web/auth"
"platform/web/core"
g "platform/web/globals"
s "platform/web/services"
"strings"
"github.com/gofiber/fiber/v2"
)
@@ -126,3 +128,43 @@ func DeleteArticle(c *fiber.Ctx) error {
return s.Article.Delete(req.Id)
}
func UploadArticleImage(c *fiber.Ctx) error {
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeArticleWrite)
if err != nil {
return err
}
fileHeader, err := c.FormFile("file")
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, "缺少上传文件 file")
}
result, err := s.Article.UploadImage(fileHeader, articleUploadBaseURL(c))
if err != nil {
return err
}
return c.JSON(result)
}
func articleUploadBaseURL(c *fiber.Ctx) string {
if env.UploadPublicBaseURL != "" {
return strings.TrimRight(env.UploadPublicBaseURL, "/")
}
scheme := c.Protocol()
if forwardedProto := c.Get("X-Forwarded-Proto"); forwardedProto != "" {
scheme = strings.TrimSpace(strings.Split(forwardedProto, ",")[0])
}
host := c.Get(fiber.HeaderHost)
if forwardedHost := c.Get("X-Forwarded-Host"); forwardedHost != "" {
host = strings.TrimSpace(strings.Split(forwardedHost, ",")[0])
}
if host == "" {
return ""
}
return scheme + "://" + host
}