Files
backend/internal/handler/upload_handler.go
lan 4d8f2ec997 Initial backend repository commit.
Set up project files and add .gitignore to exclude local build/runtime artifacts.

Made-with: Cursor
2026-03-09 21:28:58 +08:00

91 lines
1.9 KiB
Go

package handler
import (
"github.com/gin-gonic/gin"
"carrot_bbs/internal/pkg/response"
"carrot_bbs/internal/service"
)
// UploadHandler 上传处理器
type UploadHandler struct {
uploadService *service.UploadService
}
// NewUploadHandler 创建上传处理器
func NewUploadHandler(uploadService *service.UploadService) *UploadHandler {
return &UploadHandler{
uploadService: uploadService,
}
}
// UploadImage 上传图片
func (h *UploadHandler) UploadImage(c *gin.Context) {
userID := c.GetString("user_id")
if userID == "" {
response.Unauthorized(c, "")
return
}
file, err := c.FormFile("image")
if err != nil {
response.BadRequest(c, "image file is required")
return
}
url, err := h.uploadService.UploadImage(c.Request.Context(), file)
if err != nil {
response.InternalServerError(c, "failed to upload image")
return
}
response.Success(c, gin.H{"url": url})
}
// UploadAvatar 上传头像
func (h *UploadHandler) UploadAvatar(c *gin.Context) {
userID := c.GetString("user_id")
if userID == "" {
response.Unauthorized(c, "")
return
}
file, err := c.FormFile("image")
if err != nil {
response.BadRequest(c, "avatar file is required")
return
}
url, err := h.uploadService.UploadAvatar(c.Request.Context(), userID, file)
if err != nil {
response.InternalServerError(c, "failed to upload avatar")
return
}
response.Success(c, gin.H{"url": url})
}
// UploadCover 上传头图(个人主页封面)
func (h *UploadHandler) UploadCover(c *gin.Context) {
userID := c.GetString("user_id")
if userID == "" {
response.Unauthorized(c, "")
return
}
file, err := c.FormFile("image")
if err != nil {
response.BadRequest(c, "image file is required")
return
}
url, err := h.uploadService.UploadCover(c.Request.Context(), userID, file)
if err != nil {
response.InternalServerError(c, "failed to upload cover")
return
}
response.Success(c, gin.H{"url": url})
}