2024-04-03 14:02:28 +08:00

73 lines
1.2 KiB
Go

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))
}