50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package api
|
|
|
|
import (
|
|
"bbs-go/internal/models/constants"
|
|
"bbs-go/internal/pkg/uploader"
|
|
"io"
|
|
"log/slog"
|
|
"strconv"
|
|
|
|
"github.com/kataras/iris/v12"
|
|
"github.com/mlogclub/simple/web"
|
|
|
|
"bbs-go/internal/services"
|
|
)
|
|
|
|
type UploadController struct {
|
|
Ctx iris.Context
|
|
}
|
|
|
|
func (c *UploadController) Post() *web.JsonResult {
|
|
user := services.UserTokenService.GetCurrent(c.Ctx)
|
|
if err := services.UserService.CheckPostStatus(user); err != nil {
|
|
return web.JsonError(err)
|
|
}
|
|
|
|
file, header, err := c.Ctx.FormFile("image")
|
|
if err != nil {
|
|
return web.JsonError(err)
|
|
}
|
|
defer file.Close()
|
|
|
|
if header.Size > constants.UploadMaxBytes {
|
|
return web.JsonErrorMsg("图片不能超过" + strconv.Itoa(constants.UploadMaxM) + "M")
|
|
}
|
|
|
|
contentType := header.Header.Get("Content-Type")
|
|
fileBytes, err := io.ReadAll(file)
|
|
if err != nil {
|
|
return web.JsonError(err)
|
|
}
|
|
|
|
slog.Info("上传文件:", slog.Any("filename", header.Filename), slog.Any("size", header.Size))
|
|
|
|
url, err := uploader.PutImage(fileBytes, contentType)
|
|
if err != nil {
|
|
return web.JsonError(err)
|
|
}
|
|
return web.NewEmptyRspBuilder().Put("url", url).JsonResult()
|
|
}
|