我正在尝试弄清如何在Go中接受/接收HTTP Post。我只想能够接收文件,获取其MIME类型并将文件保存到本地。
我一整天都在搜索,但我找到的所有内容都是如何将文件发送到某个远程位置,而没有任何一个示例涵盖接收它的情况。
任何帮助将不胜感激。
使用Justinas的示例并与我的现有实验混合,我已经做到了这一步,但m.Post似乎从未被调用。
我一整天都在搜索,但我找到的所有内容都是如何将文件发送到某个远程位置,而没有任何一个示例涵盖接收它的情况。
任何帮助将不胜感激。
使用Justinas的示例并与我的现有实验混合,我已经做到了这一步,但m.Post似乎从未被调用。
package main
import (
"fmt"
"io"
"net/http"
"os"
"github.com/codegangsta/martini"
"github.com/codegangsta/martini-contrib/render"
)
func main() {
m := martini.Classic()
m.Use(render.Renderer(render.Options{
Directory: "templates", // Specify what path to load the templates from.
Layout: "layout", // Specify a layout template. Layouts can call {{ yield }} to render the current template.
Charset: "UTF-8", // Sets encoding for json and html content-types.
}))
m.Get("/", func(r render.Render) {
fmt.Printf("%v\n", "g./")
r.HTML(200, "hello", "world")
})
m.Get("/:who", func(args martini.Params, r render.Render) {
fmt.Printf("%v\n", "g./:who")
r.HTML(200, "hello", args["who"])
})
m.Post("/up", func(w http.ResponseWriter, r *http.Request) {
fmt.Printf("%v\n", "p./up")
file, header, err := r.FormFile("file")
defer file.Close()
if err != nil {
fmt.Fprintln(w, err)
return
}
out, err := os.Create("/tmp/file")
if err != nil {
fmt.Fprintf(w, "Failed to open the file for writing")
return
}
defer out.Close()
_, err = io.Copy(out, file)
if err != nil {
fmt.Fprintln(w, err)
}
// the header contains useful info, like the original file name
fmt.Fprintf(w, "File %s uploaded successfully.", header.Filename)
})
m.Run()
}
enctype
(multipart/form-data)。 - justinas