package upload import ( "mime/multipart" fileutil "management/internal/pkg/file" "management/internal/pkg/gin/gu" "github.com/drhin/logger" "github.com/gin-gonic/gin" ) type app struct { log *logger.Logger } func newApp(log *logger.Logger) *app { return &app{ log: log, } } func (a *app) img(ctx *gin.Context) { fh, err := ctx.FormFile("files") if err != nil { gu.Failed(ctx, err.Error()) return } path, err := fileutil.UploadFile(fh, fileutil.IMG) if err != nil { gu.Failed(ctx, err.Error()) return } gu.Ok(ctx, path) } func (a *app) file(ctx *gin.Context) { fh, err := ctx.FormFile("files") if err != nil { gu.Failed(ctx, err.Error()) return } path, err := fileutil.UploadFile(fh, fileutil.ALL) if err != nil { gu.Failed(ctx, err.Error()) return } gu.Ok(ctx, path) } type FileRes struct { Name string `json:"name"` Path string `json:"path"` } func (a *app) multiFiles(ctx *gin.Context) { form, err := ctx.MultipartForm() if err != nil { gu.Failed(ctx, err.Error()) return } files := form.File["files"] var res []FileRes c := make(chan FileRes, 2) defer close(c) for i, file := range files { go func(item *multipart.FileHeader, key int) { ufr := FileRes{Name: item.Filename} filePath, err := fileutil.UploadFile(item, fileutil.ALL) if err != nil { gu.Failed(ctx, err.Error()) return } ufr.Path = filePath c <- ufr }(file, i) } for { v, ok := <-c if ok { res = append(res, v) } if len(files) == len(res) { break } } gu.Ok(ctx, res) }