一尘不染

如何从HTML表单读取输入并将其保存在文件中-Golang

go

我正在尝试建立一个非常简单的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表单输入的正确方向,那我将非常感激!提前致谢。


阅读 294

收藏
2020-07-02

共1个答案

一尘不染

您需要选择一种格式来写入文件。让我们特别选择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)
}
2020-07-02