【问题标题】:How to read input from a HTML form and save it in a file - Golang如何从 HTML 表单中读取输入并将其保存在文件中 - Golang
【发布时间】:2017-05-17 01:32:09
【问题描述】:

我正在尝试设置一个非常简单的 Web 服务器,用户可以在其中访问一个站点并写入一个字符串和一个 int。然后我想保存这两个输入,我的想法是将它保存到一个文本文件中,该文件也可以在浏览器中显示:.../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() 但也许有一些更易于使用的内置函数?

如果有人能指出我如何从 HTML 表单中保存输入的正确方向,那我将非常感激!提前致谢。

【问题讨论】:

    标签: forms go


    【解决方案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)
    }
    

    【讨论】:

    • 谢谢,真的很有帮助。我一直在尝试使用 FormValue,但由于我对编程很陌生,所以我错过了关于编码的一点。但你对我说得很清楚。
    • 当然,请查看有关编码的 pkg 文档,golang.org/pkg/encoding 例如,如果您想要的话,您可以使用 encoding/binary pkg 读取/写入原始结构。 JSON 只是一个很好的中间地带,用于解释某些内容并轻松检查结果。
    猜你喜欢
    • 2012-01-05
    • 2018-01-17
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多