From 7942e4a77b10a37918bcfdd3733f8943283abdce Mon Sep 17 00:00:00 2001 From: Vishal Rana Date: Sat, 12 Mar 2016 15:06:52 -0800 Subject: [PATCH] Engine#Multipart,#FormFile. Closes #394. Signed-off-by: Vishal Rana --- context.go | 24 +++++++++++++++--------- echo.go | 4 ++-- engine/engine.go | 3 +++ engine/fasthttp/request.go | 11 ++++++++++- engine/standard/request.go | 10 ++++++++++ test/request.go | 11 +++++++++++ 6 files changed, 51 insertions(+), 12 deletions(-) diff --git a/context.go b/context.go index a5e24620..61b1f975 100644 --- a/context.go +++ b/context.go @@ -189,7 +189,7 @@ func (c *context) Render(code int, name string, data interface{}) (err error) { } c.response.Header().Set(ContentType, TextHTMLCharsetUTF8) c.response.WriteHeader(code) - c.response.Write(buf.Bytes()) + _, err = c.response.Write(buf.Bytes()) return } @@ -197,7 +197,7 @@ func (c *context) Render(code int, name string, data interface{}) (err error) { func (c *context) HTML(code int, html string) (err error) { c.response.Header().Set(ContentType, TextHTMLCharsetUTF8) c.response.WriteHeader(code) - c.response.Write([]byte(html)) + _, err = c.response.Write([]byte(html)) return } @@ -205,7 +205,7 @@ func (c *context) HTML(code int, html string) (err error) { func (c *context) String(code int, s string) (err error) { c.response.Header().Set(ContentType, TextPlainCharsetUTF8) c.response.WriteHeader(code) - c.response.Write([]byte(s)) + _, err = c.response.Write([]byte(s)) return } @@ -225,7 +225,7 @@ func (c *context) JSON(code int, i interface{}) (err error) { func (c *context) JSONBlob(code int, b []byte) (err error) { c.response.Header().Set(ContentType, ApplicationJSONCharsetUTF8) c.response.WriteHeader(code) - c.response.Write(b) + _, err = c.response.Write(b) return } @@ -238,9 +238,13 @@ func (c *context) JSONP(code int, callback string, i interface{}) (err error) { } c.response.Header().Set(ContentType, ApplicationJavaScriptCharsetUTF8) c.response.WriteHeader(code) - c.response.Write([]byte(callback + "(")) - c.response.Write(b) - c.response.Write([]byte(");")) + if _, err = c.response.Write([]byte(callback + "(")); err != nil { + return + } + if _, err = c.response.Write(b); err != nil { + return + } + _, err = c.response.Write([]byte(");")) return } @@ -260,8 +264,10 @@ func (c *context) XML(code int, i interface{}) (err error) { func (c *context) XMLBlob(code int, b []byte) (err error) { c.response.Header().Set(ContentType, ApplicationXMLCharsetUTF8) c.response.WriteHeader(code) - c.response.Write([]byte(xml.Header)) - c.response.Write(b) + if _, err = c.response.Write([]byte(xml.Header)); err != nil { + return + } + _, err = c.response.Write(b) return } diff --git a/echo.go b/echo.go index a288db4b..d7d09730 100644 --- a/echo.go +++ b/echo.go @@ -201,7 +201,7 @@ func New() (e *Echo) { // Logger e.logger = log.New("echo") - e.logger.SetLevel(log.ERROR) + e.logger.SetLevel(log.FATAL) return } @@ -253,7 +253,7 @@ func (e *Echo) DefaultHTTPErrorHandler(err error, c Context) { if !c.Response().Committed() { c.String(code, msg) } - e.logger.Error(err) + e.logger.Debug(err) } // SetHTTPErrorHandler registers a custom Echo.HTTPErrorHandler. diff --git a/engine/engine.go b/engine/engine.go index 6b0f1e91..39b2d7ef 100644 --- a/engine/engine.go +++ b/engine/engine.go @@ -2,6 +2,7 @@ package engine import ( "io" + "mime/multipart" "time" "github.com/labstack/gommon/log" @@ -30,6 +31,8 @@ type ( Method() string Body() io.ReadCloser FormValue(string) string + FormFile(string) (*multipart.FileHeader, error) + MultipartForm() (*multipart.Form, error) } // Response defines an interface for HTTP response. diff --git a/engine/fasthttp/request.go b/engine/fasthttp/request.go index 3904657e..e512692b 100644 --- a/engine/fasthttp/request.go +++ b/engine/fasthttp/request.go @@ -6,6 +6,7 @@ import ( "bytes" "io" "io/ioutil" + "mime/multipart" ) import ( @@ -66,7 +67,15 @@ func (r *Request) Body() io.ReadCloser { } func (r *Request) FormValue(name string) string { - return "" + return string(r.RequestCtx.FormValue(name)) +} + +func (r *Request) FormFile(name string) (*multipart.FileHeader, error) { + return r.RequestCtx.FormFile(name) +} + +func (r *Request) MultipartForm() (*multipart.Form, error) { + return r.RequestCtx.MultipartForm() } func (r *Request) reset(c *fasthttp.RequestCtx, h engine.Header, u engine.URL) { diff --git a/engine/standard/request.go b/engine/standard/request.go index 4f682853..f3fb744c 100644 --- a/engine/standard/request.go +++ b/engine/standard/request.go @@ -2,6 +2,7 @@ package standard import ( "io" + "mime/multipart" "net/http" "github.com/labstack/echo/engine" @@ -78,6 +79,15 @@ func (r *Request) FormValue(name string) string { return r.Request.FormValue(name) } +func (r *Request) FormFile(name string) (*multipart.FileHeader, error) { + _, fh, err := r.Request.FormFile(name) + return fh, err +} + +func (r *Request) MultipartForm() (*multipart.Form, error) { + return r.Request.MultipartForm, nil +} + func (r *Request) reset(req *http.Request, h engine.Header, u engine.URL) { r.Request = req r.header = h diff --git a/test/request.go b/test/request.go index e50204d9..92834b09 100644 --- a/test/request.go +++ b/test/request.go @@ -2,6 +2,7 @@ package test import ( "io" + "mime/multipart" "net/http" "github.com/labstack/echo/engine" @@ -79,6 +80,16 @@ func (r *Request) FormValue(name string) string { return r.request.FormValue(name) } +func (r *Request) FormFile(name string) (*multipart.FileHeader, error) { + _, fh, err := r.request.FormFile(name) + return fh, err +} + +func (r *Request) MultipartForm() (*multipart.Form, error) { + m := r.request.MultipartForm + return m, nil +} + func (r *Request) Object() interface{} { return r.request }