diff --git a/etc/init.shy b/etc/init.shy index cdafa442..87afb658 100644 --- a/etc/init.shy +++ b/etc/init.shy @@ -1,3 +1,2 @@ source etc/local.shy ~aaa login root root - diff --git a/src/contexts/web/web.go b/src/contexts/web/web.go index 6e0c6576..ceefc642 100644 --- a/src/contexts/web/web.go +++ b/src/contexts/web/web.go @@ -2,6 +2,7 @@ package web // {{{ // }}} import ( // {{{ "contexts" + "strconv" "toolkit" "encoding/json" @@ -193,6 +194,8 @@ func (web *WEB) Trans(m *ctx.Message, key string, hand func(*ctx.Message, *ctx.C web.HandleFunc(key, func(w http.ResponseWriter, r *http.Request) { msg := m.Spawn(m.Target()).Set("detail", key) + msg.Add("option", "method", r.Method) + for k, v := range r.Form { msg.Add("option", k, v...) } @@ -370,7 +373,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心", "query": &ctx.Config{Name: "query", Value: "", Help: "主机参数"}, "output": &ctx.Config{Name: "output", Value: "stdout", Help: "响应输出"}, "editor": &ctx.Config{Name: "editor", Value: "vim", Help: "响应编辑器"}, - "upload_dir": &ctx.Config{Name: "upload_dir", Value: "tmp", Help: "上传文件路径"}, + "upload_tpl": &ctx.Config{Name: "upload_tpl", Value: "usr/up.html", Help: "上传文件路径"}, }, Commands: map[string]*ctx.Command{ "serve": &ctx.Command{Name: "serve [directory [address [protocol]]]", Help: "开启应用服务", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { @@ -597,95 +600,90 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心", }}, "/upload": &ctx.Command{Name: "/upload", Help: "文件上传", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { r := m.Data["request"].(*http.Request) // {{{ - - file, header, e := r.FormFile("file") - m.Assert(e) - - dir := r.FormValue("path") - if dir == "" { - dir = m.Conf("upload_dir") - } - name := path.Join(dir, header.Filename) - m.Append("path", name) - if _, e := os.Stat(name); e == nil { - m.Echo("failure, file already exist!") - return - } - - f, e := os.Create(name) - m.Assert(e) - - n, e := io.Copy(f, file) - m.Assert(e) - - m.Echo("%d", n) - // }}} - }}, - "download": &ctx.Command{Name: "download file", Help: "下载文件", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { - msg := m.Spawn(m.Target()) // {{{ - msg.Cmd("get", "/upload", "method", "POST", "file", "file", arg[0]) - m.Copy(msg, "result") - // }}} - }}, - "/download": &ctx.Command{Name: "/download", Help: "文件下载", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { - r := m.Data["request"].(*http.Request) // {{{ w := m.Data["response"].(http.ResponseWriter) if !m.Options("file") { m.Option("file", m.Cap("directory")) } + dir := m.Option("file") - file := m.Option("file") - s, e := os.Stat(file) - if m.Assert(e); s.IsDir() { - fs, e := ioutil.ReadDir(file) + if m.Option("method") == "POST" { + file, header, e := r.FormFile("file") m.Assert(e) - switch m.Option("list") { - case "time": - if m.Option("order") == "max" { - sort.Sort(listtime(fs)) - } else { - sort.Sort(sort.Reverse(listtime(fs))) - } - case "size": - if m.Option("order") == "max" { - sort.Sort(listsize(fs)) - } else { - sort.Sort(sort.Reverse(listsize(fs))) - } - case "name": - if m.Option("order") == "max" { - sort.Sort(listname(fs)) - } else { - sort.Sort(sort.Reverse(listname(fs))) - } + name := path.Join(dir, header.Filename) + + if _, e := os.Stat(name); e != nil { + f, e := os.Create(name) + m.Assert(e) + + _, e = io.Copy(f, file) + m.Assert(e) + m.Option("message", "", "\n", name) + } else { + m.Option("message", "", "\n", name, "already exist!") } - - for _, v := range fs { - m.Add("append", "time", v.ModTime().Format("2006-01-02 15:04:05")) - - if v.IsDir() { - m.Add("append", "size", "---") - } else { - m.Add("append", "size", kit.FmtSize(v.Size())) - } - - m.Add("append", "name", v.Name()) - } - w.Header().Add("Content-Type", "text/html") - m.Assert(template.Must(template.ParseGlob("usr/up.tpl")).Execute(w, m.Meta)) - delete(m.Meta, "result") - delete(m.Meta, "append") - } else { - m.Log("fuck", nil, "why %s", file) - http.ServeFile(w, r, file) } - /* - {{range $key := .append}} - {{index $meta $key $i}} - {{end}} - */ + + file := m.Option("file") + + s, e := os.Stat(file) + if m.Assert(e); !s.IsDir() { + http.ServeFile(w, r, file) + return + } + + fs, e := ioutil.ReadDir(file) + m.Assert(e) + + max := true + if i, e := strconv.Atoi(m.Option("order")); e == nil { + max = i%2 == 1 + } + + switch m.Option("list") { + case "time": + if max { + m.Option("message", "sort by time") + sort.Sort(listtime(fs)) + } else { + m.Option("message", "sort by time reverse") + sort.Sort(sort.Reverse(listtime(fs))) + } + case "size": + if max { + m.Option("message", "sort by size") + sort.Sort(listsize(fs)) + } else { + m.Option("message", "sort by size reverse") + sort.Sort(sort.Reverse(listsize(fs))) + } + case "name": + if max { + m.Option("message", "sort by name") + sort.Sort(listname(fs)) + } else { + m.Option("message", "sort by name reverse") + sort.Sort(sort.Reverse(listname(fs))) + } + } + + for _, v := range fs { + m.Add("append", "time", v.ModTime().Format("2006-01-02 15:04:05")) + m.Add("append", "size", kit.FmtSize(v.Size())) + + name := v.Name() + if v.IsDir() { + name += "/" + } + + m.Add("append", "name", name) + } + + w.Header().Add("Content-Type", "text/html") + m.Assert(template.Must(template.ParseGlob(m.Conf("upload_tpl"))).Execute(w, m.Meta)) + delete(m.Meta, "result") + delete(m.Meta, "append") // }}} }}, "temp": &ctx.Command{Name: "temp", Help: "应用示例", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { diff --git a/usr/up.html b/usr/up.html index b46a9a54..4d510a9e 100644 --- a/usr/up.html +++ b/usr/up.html @@ -1,9 +1,79 @@ + + + + + + + +
- - - +
upload + +
+
message + {{index . "message"}} +
+ +{{range .append}}{{end}} +{{range .append}}{{end}} +{{$meta := .}} {{$first := index .append 0}} +{{range $i, $k := index . $first}} + + {{range $key := index $meta "append"}} + {{if eq $key "name"}} + + {{else}} + + {{end}} + {{end}} + +{{end}} +
{{.}}
+ {{index $meta $key $i}} + + {{index $meta $key $i}} +
+ + diff --git a/usr/up.tpl b/usr/up.tpl deleted file mode 100644 index 35cf0ab2..00000000 --- a/usr/up.tpl +++ /dev/null @@ -1,66 +0,0 @@ - - - - - -
- - - -
- - - - - -{{range .append}}{{end}} -{{range .append}}{{end}} -{{$meta := .}} {{$first := index .append 0}} -{{range $i, $k := index . $first}} - - {{range $key := index $meta "append"}} - {{if eq $key "name"}} - - {{else}} - - {{end}} - {{end}} - -{{end}} -
{{.}}
- {{index $meta $key $i}} - - {{index $meta $key $i}} -
-