2012-09-20 93 views
9

我想設置一個非常簡單的Web服務器,用戶訪問一個站點並寫入一個字符串和一個int.Then我想保存這些兩個輸入,我的想法是做到一個文本文件,也可以在瀏覽器中顯示:.../textfile/如何從HTML表單讀取輸入並將其保存在文件中 - Golang

我不知道什麼樣的標準是多少代碼是好的職位,但這裏是我到目前爲止有:

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表單的輸入比我會非常棒!提前致謝。

回答

13

您需要選擇一種格式寫入文件。我們特別選擇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) 
} 
+0

謝謝,這是真的很有幫助。我一直在嘗試使用FormValue,但由於我對編程非常陌生,所以錯過了關於編碼的一點。但是你對我說得很清楚。 – miner

+1

當然,簽出關於編碼的pkg文檔,http://golang.org/pkg/encoding/ 你可以例如讀/寫編碼/二進制pkg的原始結構,如果這是你想要的。 JSON只是一個很好的中間場所,可以很容易地解釋和檢查結果。 – dskinner

相關問題