| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- package handlers
- import (
- "easydo-echo_win7/models"
- "easydo-echo_win7/services"
- "easydo-echo_win7/utils"
- "fmt"
- "net/http"
- "path/filepath"
- // "strings"
- "easydo-echo_win7/middleware"
- "github.com/google/uuid"
- "github.com/labstack/echo/v4"
- )
- func Add_minio_to_routes(e *echo.Echo) {
- group := e.Group("/file")
- group.Use(middleware.AuthMiddleware)
- group.POST("/upload", fileUpload)
- group.POST("/remove", fileRemove)
- }
- // 响应结构体
- type UploadResponse struct {
- Code int `json:"code"`
- Message string `json:"message"`
- Expands map[string]interface{} `json:"expands,omitempty"`
- }
- // UploadHandler 是您的主要处理函数
- func fileUpload(c echo.Context) error {
- // 1. 从form-data中获取文件
- file, err := c.FormFile("file")
- if err != nil {
- return c.JSON(http.StatusBadRequest, utils.ErrorResponse("无法获取上传的文件,请检查字段名是否为'file'", ""))
- }
- // 2. 打开上传的文件
- src, err := file.Open()
- if err != nil {
- return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("无法打开上传的文件", ""))
- }
- defer src.Close()
- // 3. 生成唯一对象名并上传到MinIO
- objectName := generateUUIDFileName(file.Filename)
- // 上传到MinIO[citation:2]
- filePath, err := services.MinioClient.UploadFile(services.BucketName, src, objectName)
- if err != nil {
- return c.JSON(http.StatusInternalServerError, utils.ErrorResponse(fmt.Sprintf("上传到MinIO失败: %v", err), ""))
- }
- // 构建成功响应
- return c.JSON(http.StatusOK, UploadResponse{
- Code: 200,
- Message: "success",
- Expands: map[string]interface{}{
- "file": filePath,
- },
- })
- }
- // 生成UUID的辅助函数
- func generateUUIDFileName(filename string) string {
- fullExt := filepath.Ext(filename)
- uuid := uuid.New()
- return uuid.String() + fullExt
- }
- func fileRemove(c echo.Context) error {
- file := new(models.MinioFile)
- if err := c.Bind(file); err != nil {
- return c.JSON(http.StatusOK, nil)
- }
- // file_path := *file.Path
- // bucketName := strings.Split(file_path[1:], "/")[0]
- // objectName := file_path[1+len(bucketName)+1:]
- // services.MinioClient.RemoveFile(bucketName,objectName)
- if file.ID != nil {
- err := services.JdbcClient.JdbcRemoveById(file)
- if err != nil {
- utils.PrintSqlErr(err)
- return c.JSON(http.StatusInternalServerError, utils.ErrorResponse("系统错误", ""))
- }
- }
- return c.JSON(http.StatusOK, file)
- }
|