package main import ( "flag" "fmt" "log" "os" "path" "time" "github.com/loveuer/nf" "github.com/loveuer/nf/nft/resp" ) var ( addr string hostname string root string ) func init() { flag.StringVar(&addr, "addr", ":80", "") flag.StringVar(&root, "root", "/data", "save file root dir") flag.Parse() hostname = os.Getenv("HOSTNAME") if hostname == "" { hostname = fmt.Sprintf("unknown-%d", time.Now().UnixNano()) } } func main() { app := nf.New() app.Use(func(c *nf.Ctx) error { c.SetHeader("U-HOSTNAME", hostname) return c.Next() }) app.Post("/echo/file", func(c *nf.Ctx) error { type Req struct { Filename string Content string } var ( err error req = new(Req) file *os.File ) if err = c.BodyParser(req); err != nil { return resp.Resp400(c, err.Error()) } filename := path.Join(root, path.Base(req.Filename)) if file, err = os.OpenFile(filename, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0644); err != nil { return resp.Resp400(c, err.Error()) } defer file.Close() if _, err = file.WriteString(req.Content); err != nil { return resp.Resp500(c, err.Error()) } return resp.Resp200(c, nf.Map{"filename": filename}) }) log.Fatal(app.Run(addr)) }