package handler import ( "fmt" "path" "strings" "time" "github.com/gin-gonic/gin" "github.com/sundynix/pets-be/internal/middleware" "github.com/sundynix/pets-be/pkg/response" ) // Upload POST /api/upload multipart/form-data,字段名 file func (h *Handler) Upload(c *gin.Context) { fileHeader, err := c.FormFile("file") if err != nil { response.FailParams(c, "缺少上传文件 file") return } src, err := fileHeader.Open() if err != nil { response.FailErr(c, err) return } defer src.Close() ext := strings.ToLower(path.Ext(fileHeader.Filename)) objectName := fmt.Sprintf("uploads/%d/%d%s", middleware.UserID(c), time.Now().UnixNano(), ext) contentType := fileHeader.Header.Get("Content-Type") if contentType == "" { contentType = "application/octet-stream" } url, err := h.svc.Upload(objectName, src, fileHeader.Size, contentType) if err != nil { response.FailErr(c, err) return } response.OK(c, gin.H{"url": url}) }