2012-09-20 13 views
9

Próbuję skonfigurować bardzo prosty serwer WWW, na którym użytkownik uzyskuje dostęp do witryny i zapisuje ciąg znaków i int. Następnie chcę je zapisać dwa wejścia, moim pomysłem było zrobienie tego do pliku tekstowego, który również może być wyświetlany w przeglądarce: .../textfile/Jak odczytać dane wejściowe z formularza HTML i zapisać go w pliku - Golang

Nie wiem, jaka jest norma dotycząca SO na ile kodu jest w porządku poczta ale tutaj jest to, co mam tak daleko:

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) 

} 

i mój HTML postać: (bez wszystkich formatowania)

 Name: <input type="text" name="Name"> 
     <input type="submit" value="submit"></br> 
    Hours: <input type="text" name="Hours"> 
      <input type="submit" value="submit"> 

Moje początkowe myśli polegały na implementacji dwóch funkcji returnInput() i saveInput(), ale może są wbudowane funkcje, które są łatwiejsze w użyciu?

Jeśli ktoś mógłby wskazać mi w dobrym kierunku, jak zapisać dane wejściowe z formularza HTML, to byłbym bardzo wdzięczny! Z góry dziękuję.

Odpowiedz

13

Musisz wybrać format, aby zapisać do pliku. Wybierzmy JSON bez konkretnego powodu. Tak więc biorąc pod uwagę formę takiego:

<form action="/save" method="post"> ... </form> 

można mieć następującą procedurę obsługi

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

podziękować było naprawdę pomocne. Próbowałem z FormValue, ale ponieważ jestem bardzo nowy w programowaniu, przegapiłem trochę o kodowaniu. Ale bardzo mi to wyjaśniłeś. – miner

+1

Oczywiście, sprawdź dokumenty pkg na temat kodowania, http://golang.org/pkg/encoding/ Możesz na przykład odczytać/zapisać surową strukturę przy pomocy kodowania/pliku binarnego, jeśli tego chcesz. JSON jest po prostu miłym środkiem do wyjaśnienia czegoś i łatwego sprawdzenia wyniku. – dskinner

Powiązane problemy