mirror of
https://github.com/astaxie/beego.git
synced 2024-11-13 06:30:54 +00:00
Merge pull request #1455 from nkbai/develop
windows下静态文件映射找不到问题以及 grace init延后
This commit is contained in:
commit
be60f47488
@ -413,91 +413,68 @@ func (c *Controller) GetStrings(key string, def ...[]string) []string {
|
|||||||
|
|
||||||
// GetInt returns input as an int or the default value while it's present and input is blank
|
// GetInt returns input as an int or the default value while it's present and input is blank
|
||||||
func (c *Controller) GetInt(key string, def ...int) (int, error) {
|
func (c *Controller) GetInt(key string, def ...int) (int, error) {
|
||||||
if strv := c.Ctx.Input.Query(key); strv != "" {
|
strv := c.Ctx.Input.Query(key)
|
||||||
return strconv.Atoi(strv)
|
if len(strv) == 0 && len(def) > 0 {
|
||||||
} else if len(def) > 0 {
|
|
||||||
return def[0], nil
|
return def[0], nil
|
||||||
} else {
|
|
||||||
return strconv.Atoi(strv)
|
|
||||||
}
|
}
|
||||||
|
return strconv.Atoi(strv)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetInt8 return input as an int8 or the default value while it's present and input is blank
|
// GetInt8 return input as an int8 or the default value while it's present and input is blank
|
||||||
func (c *Controller) GetInt8(key string, def ...int8) (int8, error) {
|
func (c *Controller) GetInt8(key string, def ...int8) (int8, error) {
|
||||||
if strv := c.Ctx.Input.Query(key); strv != "" {
|
strv := c.Ctx.Input.Query(key)
|
||||||
i64, err := strconv.ParseInt(strv, 10, 8)
|
if len(strv) == 0 && len(def) > 0 {
|
||||||
i8 := int8(i64)
|
|
||||||
return i8, err
|
|
||||||
} else if len(def) > 0 {
|
|
||||||
return def[0], nil
|
return def[0], nil
|
||||||
} else {
|
|
||||||
i64, err := strconv.ParseInt(strv, 10, 8)
|
|
||||||
i8 := int8(i64)
|
|
||||||
return i8, err
|
|
||||||
}
|
}
|
||||||
|
i64, err := strconv.ParseInt(strv, 10, 8)
|
||||||
|
return int8(i64), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetInt16 returns input as an int16 or the default value while it's present and input is blank
|
// GetInt16 returns input as an int16 or the default value while it's present and input is blank
|
||||||
func (c *Controller) GetInt16(key string, def ...int16) (int16, error) {
|
func (c *Controller) GetInt16(key string, def ...int16) (int16, error) {
|
||||||
if strv := c.Ctx.Input.Query(key); strv != "" {
|
strv := c.Ctx.Input.Query(key)
|
||||||
i64, err := strconv.ParseInt(strv, 10, 16)
|
if len(strv) == 0 && len(def) > 0 {
|
||||||
i16 := int16(i64)
|
|
||||||
return i16, err
|
|
||||||
} else if len(def) > 0 {
|
|
||||||
return def[0], nil
|
return def[0], nil
|
||||||
} else {
|
|
||||||
i64, err := strconv.ParseInt(strv, 10, 16)
|
|
||||||
i16 := int16(i64)
|
|
||||||
return i16, err
|
|
||||||
}
|
}
|
||||||
|
i64, err := strconv.ParseInt(strv, 10, 16)
|
||||||
|
return int16(i64), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetInt32 returns input as an int32 or the default value while it's present and input is blank
|
// GetInt32 returns input as an int32 or the default value while it's present and input is blank
|
||||||
func (c *Controller) GetInt32(key string, def ...int32) (int32, error) {
|
func (c *Controller) GetInt32(key string, def ...int32) (int32, error) {
|
||||||
if strv := c.Ctx.Input.Query(key); strv != "" {
|
strv := c.Ctx.Input.Query(key)
|
||||||
i64, err := strconv.ParseInt(c.Ctx.Input.Query(key), 10, 32)
|
if len(strv) == 0 && len(def) > 0 {
|
||||||
i32 := int32(i64)
|
|
||||||
return i32, err
|
|
||||||
} else if len(def) > 0 {
|
|
||||||
return def[0], nil
|
return def[0], nil
|
||||||
} else {
|
|
||||||
i64, err := strconv.ParseInt(c.Ctx.Input.Query(key), 10, 32)
|
|
||||||
i32 := int32(i64)
|
|
||||||
return i32, err
|
|
||||||
}
|
}
|
||||||
|
i64, err := strconv.ParseInt(strv, 10, 32)
|
||||||
|
return int32(i64), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetInt64 returns input value as int64 or the default value while it's present and input is blank.
|
// GetInt64 returns input value as int64 or the default value while it's present and input is blank.
|
||||||
func (c *Controller) GetInt64(key string, def ...int64) (int64, error) {
|
func (c *Controller) GetInt64(key string, def ...int64) (int64, error) {
|
||||||
if strv := c.Ctx.Input.Query(key); strv != "" {
|
strv := c.Ctx.Input.Query(key)
|
||||||
return strconv.ParseInt(strv, 10, 64)
|
if len(strv) == 0 && len(def) > 0 {
|
||||||
} else if len(def) > 0 {
|
|
||||||
return def[0], nil
|
return def[0], nil
|
||||||
} else {
|
|
||||||
return strconv.ParseInt(strv, 10, 64)
|
|
||||||
}
|
}
|
||||||
|
return strconv.ParseInt(strv, 10, 64)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetBool returns input value as bool or the default value while it's present and input is blank.
|
// GetBool returns input value as bool or the default value while it's present and input is blank.
|
||||||
func (c *Controller) GetBool(key string, def ...bool) (bool, error) {
|
func (c *Controller) GetBool(key string, def ...bool) (bool, error) {
|
||||||
if strv := c.Ctx.Input.Query(key); strv != "" {
|
strv := c.Ctx.Input.Query(key)
|
||||||
return strconv.ParseBool(strv)
|
if len(strv) == 0 && len(def) > 0 {
|
||||||
} else if len(def) > 0 {
|
|
||||||
return def[0], nil
|
return def[0], nil
|
||||||
} else {
|
|
||||||
return strconv.ParseBool(strv)
|
|
||||||
}
|
}
|
||||||
|
return strconv.ParseBool(strv)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetFloat returns input value as float64 or the default value while it's present and input is blank.
|
// GetFloat returns input value as float64 or the default value while it's present and input is blank.
|
||||||
func (c *Controller) GetFloat(key string, def ...float64) (float64, error) {
|
func (c *Controller) GetFloat(key string, def ...float64) (float64, error) {
|
||||||
if strv := c.Ctx.Input.Query(key); strv != "" {
|
strv := c.Ctx.Input.Query(key)
|
||||||
return strconv.ParseFloat(strv, 64)
|
if len(strv) == 0 && len(def) > 0 {
|
||||||
} else if len(def) > 0 {
|
|
||||||
return def[0], nil
|
return def[0], nil
|
||||||
} else {
|
|
||||||
return strconv.ParseFloat(strv, 64)
|
|
||||||
}
|
}
|
||||||
|
return strconv.ParseFloat(strv, 64)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetFile returns the file data in file upload field named as key.
|
// GetFile returns the file data in file upload field named as key.
|
||||||
|
@ -53,18 +53,18 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// PreSignal is the position to add filter before signal
|
// PreSignal is the position to add filter before signal
|
||||||
PreSignal = iota
|
PreSignal = iota
|
||||||
// PostSignal is the position to add filter after signal
|
// PostSignal is the position to add filter after signal
|
||||||
PostSignal
|
PostSignal
|
||||||
|
|
||||||
// StateInit represent the application inited
|
// StateInit represent the application inited
|
||||||
StateInit
|
StateInit
|
||||||
// StateRunning represent the application is running
|
// StateRunning represent the application is running
|
||||||
StateRunning
|
StateRunning
|
||||||
// StateShuttingDown represent the application is shutting down
|
// StateShuttingDown represent the application is shutting down
|
||||||
StateShuttingDown
|
StateShuttingDown
|
||||||
// StateTerminate represent the application is killed
|
// StateTerminate represent the application is killed
|
||||||
StateTerminate
|
StateTerminate
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -75,34 +75,36 @@ var (
|
|||||||
socketPtrOffsetMap map[string]uint
|
socketPtrOffsetMap map[string]uint
|
||||||
runningServersForked bool
|
runningServersForked bool
|
||||||
|
|
||||||
// DefaultReadTimeOut is the HTTP read timeout
|
// DefaultReadTimeOut is the HTTP read timeout
|
||||||
DefaultReadTimeOut time.Duration
|
DefaultReadTimeOut time.Duration
|
||||||
// DefaultWriteTimeOut is the HTTP Write timeout
|
// DefaultWriteTimeOut is the HTTP Write timeout
|
||||||
DefaultWriteTimeOut time.Duration
|
DefaultWriteTimeOut time.Duration
|
||||||
// DefaultMaxHeaderBytes is the Max HTTP Herder size, default is 0, no limit
|
// DefaultMaxHeaderBytes is the Max HTTP Herder size, default is 0, no limit
|
||||||
DefaultMaxHeaderBytes int
|
DefaultMaxHeaderBytes int
|
||||||
// DefaultTimeout is the shutdown server's timeout. default is 60s
|
// DefaultTimeout is the shutdown server's timeout. default is 60s
|
||||||
DefaultTimeout time.Duration
|
DefaultTimeout time.Duration
|
||||||
|
|
||||||
isChild bool
|
isChild bool
|
||||||
socketOrder string
|
socketOrder string
|
||||||
|
once sync.Once
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
DefaultMaxHeaderBytes = 0
|
||||||
|
DefaultTimeout = 60 * time.Second
|
||||||
|
}
|
||||||
|
func onceInit() {
|
||||||
regLock = &sync.Mutex{}
|
regLock = &sync.Mutex{}
|
||||||
flag.BoolVar(&isChild, "graceful", false, "listen on open fd (after forking)")
|
flag.BoolVar(&isChild, "graceful", false, "listen on open fd (after forking)")
|
||||||
flag.StringVar(&socketOrder, "socketorder", "", "previous initialization order - used when more than one listener was started")
|
flag.StringVar(&socketOrder, "socketorder", "", "previous initialization order - used when more than one listener was started")
|
||||||
runningServers = make(map[string]*Server)
|
runningServers = make(map[string]*Server)
|
||||||
runningServersOrder = []string{}
|
runningServersOrder = []string{}
|
||||||
socketPtrOffsetMap = make(map[string]uint)
|
socketPtrOffsetMap = make(map[string]uint)
|
||||||
|
|
||||||
DefaultMaxHeaderBytes = 0
|
|
||||||
|
|
||||||
DefaultTimeout = 60 * time.Second
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewServer returns a new graceServer.
|
// NewServer returns a new graceServer.
|
||||||
func NewServer(addr string, handler http.Handler) (srv *Server) {
|
func NewServer(addr string, handler http.Handler) (srv *Server) {
|
||||||
|
once.Do(onceInit)
|
||||||
regLock.Lock()
|
regLock.Lock()
|
||||||
defer regLock.Unlock()
|
defer regLock.Unlock()
|
||||||
if !flag.Parsed() {
|
if !flag.Parsed() {
|
||||||
|
@ -897,10 +897,6 @@ type responseWriter struct {
|
|||||||
status int
|
status int
|
||||||
}
|
}
|
||||||
|
|
||||||
// Header returns the header map that will be sent by WriteHeader.
|
|
||||||
func (w *responseWriter) Header() http.Header {
|
|
||||||
return w.ResponseWriter.Header()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write writes the data to the connection as part of an HTTP reply,
|
// Write writes the data to the connection as part of an HTTP reply,
|
||||||
// and sets `started` to true.
|
// and sets `started` to true.
|
||||||
|
@ -144,7 +144,7 @@ func isStaticCompress(filePath string) bool {
|
|||||||
// searchFile search the file by url path
|
// searchFile search the file by url path
|
||||||
// if none the static file prefix matches ,return notStaticRequestErr
|
// if none the static file prefix matches ,return notStaticRequestErr
|
||||||
func searchFile(ctx *context.Context) (string, os.FileInfo, error) {
|
func searchFile(ctx *context.Context) (string, os.FileInfo, error) {
|
||||||
requestPath := filepath.Clean(ctx.Input.Request.URL.Path)
|
requestPath := filepath.ToSlash(filepath.Clean(ctx.Input.Request.URL.Path))
|
||||||
// special processing : favicon.ico/robots.txt can be in any static dir
|
// special processing : favicon.ico/robots.txt can be in any static dir
|
||||||
if requestPath == "/favicon.ico" || requestPath == "/robots.txt" {
|
if requestPath == "/favicon.ico" || requestPath == "/robots.txt" {
|
||||||
file := path.Join(".", requestPath)
|
file := path.Join(".", requestPath)
|
||||||
|
Loading…
Reference in New Issue
Block a user