2025-07-02 14:51:23 +08:00

100 lines
1.5 KiB
Go

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)
}