func (h *Handler) Handle(req zerver.Request, resp zerver.Response) { req.Wrap(func(req *http.Request, shouldClose bool) (r *http.Request, c bool) { r, c = req, shouldClose err := req.ParseMultipartForm(h.MaxMemory) if err != nil { handle.SendErr(resp, handle.BadRequest(err)) return } if req.MultipartForm == nil || req.MultipartForm.File == nil { handle.SendErr(resp, h.ErrNoFile) return } files, has := req.MultipartForm.File[h.FileKey] if !has || len(files) == 0 { handle.SendErr(resp, h.ErrNoFile) return } file := convertFileHandler(files[0]) if !h.isSuffixSupported(filepath.Ext(file.Filename)) { handle.SendErr(resp, h.ErrNonImage) return } if file.Size() > h.MaxSize { handle.SendErr(resp, h.ErrTooLarge) return } fd, err := file.Open() if err != nil { handle.SendErr(resp, handle.BadRequest(err)) return } defer fd.Close() path, err := h.SaveImage(fd) if err != nil { handle.SendErr(resp, err) return } resp.Send(h.PathKey, path) return }) }
func (h *Handler) Handle(req zerver.Request, resp zerver.Response) { req.Wrap(func(requ *http.Request, shouldClose bool) (r *http.Request, c bool) { r, c = requ, shouldClose err := requ.ParseMultipartForm(h.MaxMemory) if err != nil { handle.SendBadRequest(resp, err) return } if requ.MultipartForm == nil || requ.MultipartForm.File == nil { handle.SendErr(resp, h.ErrNoFile) return } files, has := requ.MultipartForm.File[h.FileKey] if !has || len(files) == 0 { handle.SendErr(resp, h.ErrNoFile) return } if len(h.Params) > 0 { for _, param := range h.Params { if vals := requ.MultipartForm.Value[param]; len(vals) != 0 { req.SetAttr(param, vals[0]) } } } if h.PreChecker != nil { if err = h.PreChecker(req); err != nil { handle.SendErr(resp, err) return } } file := convertFileHandler(files[0]) if !h.isSuffixSupported(filepath.Ext(file.Filename)) { handle.SendErr(resp, h.ErrNonImage) return } if file.Size() > h.MaxSize { handle.SendErr(resp, h.ErrTooLarge) return } fd, err := file.Open() if err != nil { handle.SendBadRequest(resp, err) return } defer fd.Close() h.logger.Debugf("upload file: %s, size: %s\n", fd.Filename(), bytesize.ToHuman(uint64(fd.Size()))) path, err := h.SaveImage(fd, req) if err != nil { handle.SendErr(resp, err) return } if h.PostDo != nil { err := h.PostDo(req) if err != nil { h.logger.Warnln("PostDo", err) } } resp.SetContentType(resource.RES_JSON, nil) resp.Send(h.PathKey, path) return }) }
func (h *Handler) Handle(req zerver.Request, resp zerver.Response) { req.Wrap(func(requ *http.Request, shouldClose bool) (r *http.Request, c bool) { r, c = requ, shouldClose err := requ.ParseMultipartForm(h.MaxMemory) if err != nil { handle.SendBadRequest(resp, err) return } if requ.MultipartForm == nil || requ.MultipartForm.File == nil { handle.SendErr(resp, h.ErrNoFile) return } files, has := requ.MultipartForm.File[h.FileKey] if !has || len(files) == 0 { handle.SendErr(resp, h.ErrNoFile) return } if len(h.Params) > 0 { for _, param := range h.Params { if vals := requ.MultipartForm.Value[param]; len(vals) != 0 { req.SetAttr(param, vals[0]) } } } if h.PreChecker != nil { if err = h.PreChecker(req); err != nil { handle.SendErr(resp, err) return } } file := convertFileHandler(files[0]) if !h.isSuffixSupported(filepath.Ext(file.Filename)) { handle.SendErr(resp, h.ErrNonImage) return } if file.Size() > h.MaxSize { handle.SendErr(resp, h.ErrTooLarge) return } fd, err := file.Open() if err != nil { handle.SendBadRequest(resp, err) return } defer fd.Close() if h.log.IsDebugEnable() { h.log.Debug(log.M{"msg": "file upload", "filename": fd.Filename(), "bytes": fd.Size()}) } path, err := h.SaveImage(fd, req) if err != nil { handle.SendErr(resp, err) return } if h.PostDo != nil { err := h.PostDo(req) if err != nil { h.log.Warn(log.M{"msg": "call post do failed", "err": err.Error()}) } } resp.Send(Path{path}) return }) }