package common import ( "io" "mime/multipart" "net/http" "management/internal/tpl" fileutil "management/internal/pkg/file" ) const maxImageSize = 100 << 20 // 100 MB func UploadImg(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() _, fh, err := r.FormFile("files") if err != nil { tpl.JSON(w, tpl.Response{Success: false, Message: err.Error()}) return } path, err := fileutil.UploadFile(fh, fileutil.IMG) if err != nil { tpl.JSON(w, tpl.Response{Success: false, Message: err.Error()}) return } tpl.JSON(w, tpl.Response{Success: true, Message: "ok", Data: path}) } func UploadFile(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() _, fh, err := r.FormFile("files") if err != nil { tpl.JSON(w, tpl.Response{Success: false, Message: err.Error()}) return } path, err := fileutil.UploadFile(fh, fileutil.ALL) if err != nil { tpl.JSON(w, tpl.Response{Success: false, Message: err.Error()}) return } tpl.JSON(w, tpl.Response{Success: true, Message: "ok", Data: path}) } type UploadFileRes struct { Name string `json:"name"` Path string `json:"path"` } func UploadMutilFiles(w http.ResponseWriter, r *http.Request) { defer func(Body io.ReadCloser) { _ = Body.Close() }(r.Body) err := r.ParseMultipartForm(int64(maxImageSize)) if err != nil { return } files := r.MultipartForm.File["files"] var res []UploadFileRes c := make(chan UploadFileRes, 2) defer close(c) for i, file := range files { go func(item *multipart.FileHeader, key int) { ufr := UploadFileRes{Name: item.Filename} filePath, err := fileutil.UploadFile(item, fileutil.ALL) if err != nil { tpl.JSONERR(w, 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 } } tpl.JSON(w, tpl.Response{Success: true, Message: "ok", Data: res}) }