61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
|
|
package handler
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"net/http"
|
|||
|
|
|
|||
|
|
"github.com/gin-gonic/gin"
|
|||
|
|
"x-agents/server/internal/service"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
type UploadHandler struct {
|
|||
|
|
uploadService *service.UploadService
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func NewUploadHandler(uploadService *service.UploadService) *UploadHandler {
|
|||
|
|
return &UploadHandler{uploadService: uploadService}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Upload 上传文件
|
|||
|
|
func (h *UploadHandler) Upload(c *gin.Context) {
|
|||
|
|
file, err := c.FormFile("file")
|
|||
|
|
if err != nil {
|
|||
|
|
c.JSON(http.StatusBadRequest, gin.H{"success": false, "message": "No file uploaded"})
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 检查文件大小(最大 100MB)
|
|||
|
|
if file.Size > 100*1024*1024 {
|
|||
|
|
c.JSON(http.StatusBadRequest, gin.H{"success": false, "message": "File too large (max 100MB)"})
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
result, err := h.uploadService.Upload(file)
|
|||
|
|
if err != nil {
|
|||
|
|
c.JSON(http.StatusInternalServerError, gin.H{"success": false, "message": err.Error()})
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if !result.Success {
|
|||
|
|
c.JSON(http.StatusInternalServerError, result)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
c.JSON(http.StatusOK, result)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Delete 删除文件
|
|||
|
|
func (h *UploadHandler) Delete(c *gin.Context) {
|
|||
|
|
filename := c.Param("filename")
|
|||
|
|
if filename == "" {
|
|||
|
|
c.JSON(http.StatusBadRequest, gin.H{"success": false, "message": "Filename is required"})
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if err := h.uploadService.DeleteFile(filename); err != nil {
|
|||
|
|
c.JSON(http.StatusInternalServerError, gin.H{"success": false, "message": err.Error()})
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
c.JSON(http.StatusOK, gin.H{"success": true, "message": "File deleted"})
|
|||
|
|
}
|