add json support

This commit is contained in:
Simon Rieger 2024-04-02 15:07:26 +02:00
parent c7fdd04e88
commit bd0ca05155
2 changed files with 51 additions and 20 deletions

1
.gitignore vendored
View file

@ -1 +1,2 @@
uploads/
README-SECRET.md

View file

@ -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) {