v2_2
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
|
||||
type CommonHandler interface {
|
||||
CaptchaHandler() CaptchaHandler
|
||||
UploadHandler() UploadHandler
|
||||
}
|
||||
|
||||
type commonHandler struct {
|
||||
@@ -29,3 +30,7 @@ func NewCommonHandler(conf *config.Config, render tpl.Renderer, biz commonv1.Com
|
||||
func (h *commonHandler) CaptchaHandler() CaptchaHandler {
|
||||
return NewCaptchaHandler(&h.conf.Captcha, h.render, h.biz.CaptchaBiz())
|
||||
}
|
||||
|
||||
func (h *commonHandler) UploadHandler() UploadHandler {
|
||||
return NewUploadHandler(h.render)
|
||||
}
|
||||
|
||||
111
internal/erpserver/handler/common/upload.go
Normal file
111
internal/erpserver/handler/common/upload.go
Normal file
@@ -0,0 +1,111 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"mime/multipart"
|
||||
"net/http"
|
||||
|
||||
fileutil "management/internal/pkg/file"
|
||||
"management/internal/pkg/tpl"
|
||||
)
|
||||
|
||||
type UploadHandler interface {
|
||||
Img(w http.ResponseWriter, r *http.Request)
|
||||
File(w http.ResponseWriter, r *http.Request)
|
||||
MutilFiles(w http.ResponseWriter, r *http.Request)
|
||||
}
|
||||
|
||||
type uploadHandler struct {
|
||||
render tpl.Renderer
|
||||
}
|
||||
|
||||
var _ UploadHandler = (*uploadHandler)(nil)
|
||||
|
||||
func NewUploadHandler(render tpl.Renderer) *uploadHandler {
|
||||
return &uploadHandler{
|
||||
render: render,
|
||||
}
|
||||
}
|
||||
|
||||
const maxImageSize = 100 << 20 // 100 MB
|
||||
|
||||
func (h *uploadHandler) Img(w http.ResponseWriter, r *http.Request) {
|
||||
defer r.Body.Close()
|
||||
|
||||
_, fh, err := r.FormFile("files")
|
||||
if err != nil {
|
||||
h.render.JSONERR(w, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
path, err := fileutil.UploadFile(fh, fileutil.IMG)
|
||||
if err != nil {
|
||||
h.render.JSONERR(w, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
h.render.JSON(w, tpl.Response{Success: true, Message: "ok", Data: path})
|
||||
}
|
||||
|
||||
func (h *uploadHandler) File(w http.ResponseWriter, r *http.Request) {
|
||||
defer r.Body.Close()
|
||||
|
||||
_, fh, err := r.FormFile("files")
|
||||
if err != nil {
|
||||
h.render.JSONERR(w, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
path, err := fileutil.UploadFile(fh, fileutil.ALL)
|
||||
if err != nil {
|
||||
h.render.JSONERR(w, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
h.render.JSON(w, tpl.Response{Success: true, Message: "ok", Data: path})
|
||||
}
|
||||
|
||||
type UploadFileRes struct {
|
||||
Name string `json:"name"`
|
||||
Path string `json:"path"`
|
||||
}
|
||||
|
||||
func (h *uploadHandler) MutilFiles(w http.ResponseWriter, r *http.Request) {
|
||||
defer r.Body.Close()
|
||||
|
||||
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 {
|
||||
h.render.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
|
||||
}
|
||||
}
|
||||
|
||||
h.render.JSON(w, tpl.Response{Success: true, Message: "ok", Data: res})
|
||||
}
|
||||
Reference in New Issue
Block a user