static serve

静态文件处理中间件,默认支持通过目录访问,在实例使用中可以根据需求实现接口以使用各类不同的存储方式,如packr打包或mongodb存储等。

Example

  1. package main
  2. import (
  3. "github.com/vicanso/elton"
  4. "github.com/vicanso/elton/middleware"
  5. )
  6. func main() {
  7. e := elton.New()
  8. sf := new(middleware.FS)
  9. // static file route
  10. e.GET("/*", middleware.NewStaticServe(sf, middleware.StaticServeConfig{
  11. Path: "/tmp",
  12. // 客户端缓存一年
  13. MaxAge: 365 * 24 * 3600,
  14. // 缓存服务器缓存一个小时
  15. SMaxAge: 60 * 60,
  16. DenyQueryString: true,
  17. DisableLastModified: true,
  18. // 如果使用packr,它不支持Stat,因此需要用强ETag
  19. EnableStrongETag: true,
  20. }))
  21. err := e.ListenAndServe(":3000")
  22. if err != nil {
  23. panic(err)
  24. }
  25. }

使用packr打包前端应用程序,通过static serve提供网站静态文件访问:

Example

  1. package main
  2. import (
  3. "bytes"
  4. "io"
  5. "os"
  6. packr "github.com/gobuffalo/packr/v2"
  7. "github.com/vicanso/elton"
  8. "github.com/vicanso/elton/middleware"
  9. )
  10. var (
  11. box = packr.New("asset", "./")
  12. )
  13. type (
  14. staticFile struct {
  15. box *packr.Box
  16. }
  17. )
  18. func (sf *staticFile) Exists(file string) bool {
  19. return sf.box.Has(file)
  20. }
  21. func (sf *staticFile) Get(file string) ([]byte, error) {
  22. return sf.box.Find(file)
  23. }
  24. func (sf *staticFile) Stat(file string) os.FileInfo {
  25. return nil
  26. }
  27. func (sf *staticFile) NewReader(file string) (io.Reader, error) {
  28. buf, err := sf.Get(file)
  29. if err != nil {
  30. return nil, err
  31. }
  32. return bytes.NewReader(buf), nil
  33. }
  34. func main() {
  35. e := elton.New()
  36. sf := &staticFile{
  37. box: box,
  38. }
  39. // static file route
  40. e.GET("/static/*", middleware.NewStaticServe(sf, middleware.StaticServeConfig{
  41. // 客户端缓存一年
  42. MaxAge: 365 * 24 * 3600,
  43. // 缓存服务器缓存一个小时
  44. SMaxAge: 60 * 60,
  45. DenyQueryString: true,
  46. DisableLastModified: true,
  47. }))
  48. err := e.ListenAndServe(":3000")
  49. if err != nil {
  50. panic(err)
  51. }
  52. }