mirror of
https://github.com/gin-gonic/gin.git
synced 2026-09-04 14:49:27 +08:00
Merge 64b1517faf9b536d0ec755887648c8bdf0f927ef into dcaa4296d111981ffb31ac3eba90bb63e1eb5ab9
This commit is contained in:
commit
a11dde3c53
18
context.go
18
context.go
@ -1339,6 +1339,24 @@ func (c *Context) File(filepath string) {
|
||||
|
||||
// FileFromFS writes the specified file from http.FileSystem into the body stream in an efficient way.
|
||||
func (c *Context) FileFromFS(filepath string, fs http.FileSystem) {
|
||||
file, err := fs.Open(filepath)
|
||||
if err != nil {
|
||||
http.NotFound(c.Writer, c.Request)
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
info, err := file.Stat()
|
||||
if err != nil {
|
||||
http.NotFound(c.Writer, c.Request)
|
||||
return
|
||||
}
|
||||
|
||||
if !info.IsDir() {
|
||||
http.ServeContent(c.Writer, c.Request, filepath, info.ModTime(), file)
|
||||
return
|
||||
}
|
||||
|
||||
defer func(old string) {
|
||||
c.Request.URL.Path = old
|
||||
}(c.Request.URL.Path)
|
||||
|
||||
@ -25,6 +25,7 @@ import (
|
||||
"strings"
|
||||
"sync"
|
||||
"testing"
|
||||
"testing/fstest"
|
||||
"time"
|
||||
|
||||
"github.com/gin-contrib/sse"
|
||||
@ -1558,6 +1559,21 @@ func TestContextRenderFileFromFS(t *testing.T) {
|
||||
assert.Equal(t, "/some/path", c.Request.URL.Path)
|
||||
}
|
||||
|
||||
func TestContextRenderFileFromFSIndexHTML(t *testing.T) {
|
||||
w := httptest.NewRecorder()
|
||||
c, _ := CreateTestContext(w)
|
||||
|
||||
c.Request, _ = http.NewRequest(http.MethodGet, "/", nil)
|
||||
c.FileFromFS("www/index.html", http.FS(fstest.MapFS{
|
||||
"www/index.html": {Data: []byte("index")},
|
||||
}))
|
||||
|
||||
assert.Equal(t, http.StatusOK, w.Code)
|
||||
assert.Equal(t, "index", w.Body.String())
|
||||
assert.Empty(t, w.Header().Get("Location"))
|
||||
assert.Equal(t, "/", c.Request.URL.Path)
|
||||
}
|
||||
|
||||
func TestContextRenderAttachment(t *testing.T) {
|
||||
w := httptest.NewRecorder()
|
||||
c, _ := CreateTestContext(w)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user