100 lines
1.5 KiB
Go
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)
|
|
}
|