Files
web_template/internal/handler/upload.go

84 lines
2.0 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package handler
import (
"gotest/internal/service"
"github.com/gin-gonic/gin"
)
// UploadHandler 文件上传处理器
type UploadHandler struct {
uploadService *service.UploadService
}
// NewUploadHandler 创建上传处理器
func NewUploadHandler(uploadService *service.UploadService) *UploadHandler {
return &UploadHandler{uploadService: uploadService}
}
// Upload 文件上传 POST /api/v1/upload?module=enterprise
// module 参数指定上传到哪个模块(enterprise/shop/food/game/app/music/common)
func (h *UploadHandler) Upload(c *gin.Context) {
module := c.DefaultQuery("module", "common")
file, err := c.FormFile("file")
if err != nil {
FailBadRequest(c, "请选择要上传的文件")
return
}
src, err := file.Open()
if err != nil {
FailInternal(c, "文件读取失败")
return
}
defer src.Close()
url, err := h.uploadService.Upload(module, file.Filename, file.Header.Get("Content-Type"), file.Size, src)
if err != nil {
FailBadRequest(c, err.Error())
return
}
Success(c, gin.H{"url": url})
}
// ListFiles 文件列表 GET /api/v1/upload/list?module=enterprise
func (h *UploadHandler) ListFiles(c *gin.Context) {
module := c.DefaultQuery("module", "common")
files, err := h.uploadService.ListFiles(module)
if err != nil {
FailInternal(c, "获取文件列表失败: "+err.Error())
return
}
Success(c, gin.H{
"list": files,
"total": len(files),
})
}
// DeleteFile 删除文件 DELETE /api/v1/upload?module=enterprise&filename=xxx.jpg
func (h *UploadHandler) DeleteFile(c *gin.Context) {
module := c.DefaultQuery("module", "common")
filename := c.Query("filename")
if filename == "" {
FailBadRequest(c, "文件名不能为空")
return
}
if err := h.uploadService.DeleteFile(module, filename); err != nil {
FailBadRequest(c, "删除失败: "+err.Error())
return
}
SuccessMsg(c, "删除成功")
}
// GetModules 获取支持的模块列表 GET /api/v1/upload/modules
func (h *UploadHandler) GetModules(c *gin.Context) {
modules := h.uploadService.GetModules()
Success(c, gin.H{"modules": modules})
}