From bd0ca051550acfeb5948d190b9ebc3e5d6d174de Mon Sep 17 00:00:00 2001 From: Simon Rieger Date: Tue, 2 Apr 2024 15:07:26 +0200 Subject: [PATCH] add json support --- .gitignore | 1 + go/main.go | 70 ++++++++++++++++++++++++++++++++++++++---------------- 2 files changed, 51 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index 8fc0d80..12a5dc4 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ uploads/ +README-SECRET.md diff --git a/go/main.go b/go/main.go index 12939e0..88c2e45 100644 --- a/go/main.go +++ b/go/main.go @@ -3,6 +3,7 @@ package main import ( "crypto/rand" "encoding/base64" + "encoding/json" "fmt" "html/template" "io" @@ -156,29 +157,15 @@ func uploadHandler(w http.ResponseWriter, r *http.Request) { lastUploadTime = time.Now() // Setzen Sie die Zeit des letzten Uploads - tmpl, err := template.ParseFiles("templates/uploadSuccess.html") - if err != nil { - http.Error(w, "Fehler beim Laden des Templates", http.StatusInternalServerError) - log.Printf("Fehler beim Laden des Templates: %v", err) + // Vor dem Template-Rendering prüfen, ob eine JSON-Antwort erwartet wird + responseType := r.URL.Query().Get("responseType") + if responseType == "json" { + jsonResponse(w, nonce, filename) return } - data := struct { - Message string - Filename string - Nonce string - }{ - Message: "Bild erfolgreich hochgeladen.", - Filename: filename, // Geändert, um den möglicherweise modifizierten Dateinamen anzuzeigen - Nonce: nonce, - } - - err = tmpl.Execute(w, data) - if err != nil { - http.Error(w, "Fehler beim Rendern des Templates", http.StatusInternalServerError) - log.Printf("Fehler beim Rendern des Templates: %v", err) - return - } + // Template-Rendering-Logik, wenn keine JSON-Antwort erwartet wird + renderTemplate(w, nonce, filename) } else { tmpl, err := template.ParseFiles("templates/uploadForm.html") @@ -197,6 +184,49 @@ func uploadHandler(w http.ResponseWriter, r *http.Request) { } } +func jsonResponse(w http.ResponseWriter, nonce string, filename string) { + w.Header().Set("Content-Type", "application/json") + response := struct { + Message string `json:"message"` + Filename string `json:"filename"` + Nonce string `json:"nonce"` + }{ + Message: "Bild erfolgreich hochgeladen.", + Filename: filename, + Nonce: nonce, + } + + json.NewEncoder(w).Encode(response) +} + +func renderTemplate(w http.ResponseWriter, nonce string, filename string) { + // Implementierung des Template-Renderings + tmpl, err := template.ParseFiles("templates/uploadSuccess.html") + if err != nil { + http.Error(w, "Fehler beim Laden des Templates", http.StatusInternalServerError) + log.Printf("Fehler beim Laden des Templates: %v", err) + return + } + + data := struct { + Message string + Filename string + Nonce string + }{ + Message: "Bild erfolgreich hochgeladen.", + Filename: filename, // Geändert, um den möglicherweise modifizierten Dateinamen anzuzeigen + Nonce: nonce, + } + + err = tmpl.Execute(w, data) + if err != nil { + http.Error(w, "Fehler beim Rendern des Templates", http.StatusInternalServerError) + log.Printf("Fehler beim Rendern des Templates: %v", err) + return + } + +} + // Funktion zur Ermittlung des MIME-Types basierend auf der Dateiendung func getMimeType(filePath string) string { switch filepath.Ext(filePath) {