我正在尝试建立一个非常简单的Web服务器,用户可以在其中访问站点并编写一个字符串和一个整数。然后我想保存这两个输入,我的想法是将其保存到一个文本文件中,该文件也可以显示在浏览器:… / textfile /
我不知道关于SO的规范是多少代码可以发布,但是到目前为止,这是我所拥有的:
type Person struct { name string hours int } const filename string = "timelister" func upload(w http.ResponseWriter, r *http.Request) { t, _ := template.ParseFiles("upload.html") t.Execute(w, nil) } func (person *Person) open() { newFilename := filename + ".txt" _, err := os.OpenFile(newFilename, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0666) if err != nil { log.Fatal("Open Filename: ", err) } } func returnInput() //want to implement this func saveInput() //want to implemet this func main() { http.HandleFunc("/", upload) http.ListenAndServe(":8080", nil) }
还有我的HTML表单:(没有所有格式)
Name: <input type="text" name="Name"> <input type="submit" value="submit"></br> Hours: <input type="text" name="Hours"> <input type="submit" value="submit">
所以我最初的想法是实现两个函数returnInput()和saveInput(),但是也许有一些内置的som函数更易于使用?
如果有人能为我指出如何保存HTML表单输入的正确方向,那我将非常感激!提前致谢。
您需要选择一种格式来写入文件。让我们特别选择JSON。因此,给出如下形式:
<form action="/save" method="post"> ... </form>
你可以有以下处理程序
import ( "strconv" "http" "os" "encoding/json" ) type Data struct { Name string Hours int } func save(w http.ResponseWriter, r *http.Request) { name := r.FormValue("Name") hours, err := strconv.Atoi(r.FormValue("Hours")) if err != nil { http.Error(w, err.Error(), 500) return } data := &Data{name, hours} b, err := json.Marshal(data) if err != nil { http.Error(w, err.Error(), 500) return } f, err := os.Open("somefile.json") if err != nil { http.Error(w, err.Error(), 500) return } f.Write(b) f.Close() } func init() { http.HandleFunc("/save", save) }