From 72f200ac5696260b98d556af62fe655ef51a4b4a Mon Sep 17 00:00:00 2001 From: Manu Mtz-Almeida Date: Thu, 21 May 2015 16:59:58 +0200 Subject: [PATCH] Adds StaticFile() --- routergroup.go | 12 ++++++++++++ routergroup_test.go | 11 +++++++++++ 2 files changed, 23 insertions(+) diff --git a/routergroup.go b/routergroup.go index c8907fcf..fe5a2fea 100644 --- a/routergroup.go +++ b/routergroup.go @@ -7,6 +7,7 @@ package gin import ( "net/http" "path" + "strings" ) // Used internally to configure router, a RouterGroup is associated with a prefix @@ -100,6 +101,17 @@ func (group *RouterGroup) Any(relativePath string, handlers ...HandlerFunc) { group.handle("TRACE", relativePath, handlers) } +func (group *RouterGroup) StaticFile(relativePath, filepath string) { + if strings.Contains(relativePath, ":") || strings.Contains(relativePath, "*") { + panic("URL parameters can not be used when serving a static file") + } + handler := func(c *Context) { + c.File(filepath) + } + group.GET(relativePath, handler) + group.HEAD(relativePath, handler) +} + // Static serves files from the given file system root. // Internally a http.FileServer is used, therefore http.NotFound is used instead // of the Router's NotFound handler. diff --git a/routergroup_test.go b/routergroup_test.go index 6500b22f..1ec70ddb 100644 --- a/routergroup_test.go +++ b/routergroup_test.go @@ -87,3 +87,14 @@ func performRequestInGroup(t *testing.T, method string) { assert.Equal(t, w.Code, 400) assert.Equal(t, w.Body.String(), "the method was "+method+" and index 1") } + +func TestRouterGroupInvalidStaticFile(t *testing.T) { + router := New() + assert.Panics(t, func() { + router.StaticFile("/path/:param", "favicon.ico") + }) + + assert.Panics(t, func() { + router.StaticFile("/path/*param", "favicon.ico") + }) +}