73 lines
1.2 KiB
Go
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))
|
||
|
}
|