package main import ( "log" "net/http" "os" ) func storeFiles(r *http.Request) ([]string, error) { r.ParseMultipartForm(20000000) filesForm := r.MultipartForm.File["epub"] paths := make([]string, 0, len(filesForm)) for _, f := range filesForm { log.Println("File uploaded:", f.Filename) file, err := f.Open() if err != nil { return paths, err } defer file.Close() path, err := StoreNewFile(f.Filename, file) if err != nil { return paths, err } paths = append(paths, path) } return paths, nil } type uploadData struct { S Status } func uploadHandler(w http.ResponseWriter, r *http.Request) { if r.Method == "POST" { sess := GetSession(r) paths, err := storeFiles(r) if err != nil { sess.Notify("Problem uploading!", "Some files were not stored. Try again or contact us if it keeps happening", "error") } uploaded := "" for _, path := range paths { title, err := ParseFile(path) if err != nil { os.Remove(NEW_PATH + path) sess.Notify("Problem uploading!", "The file '"+path[len("new/"):]+"' is not a well formed epub", "error") } else { uploaded = uploaded + " '" + title + "'" } } if uploaded != "" { sess.Notify("Upload successful!", "Added the books:"+uploaded+". Thank you for your contribution", "success") } } var data uploadData data.S = GetStatus(w, r) data.S.Upload = true loadTemplate(w, "upload", data) }