Compare commits

...

3 commits

Author SHA1 Message Date
888036cf6c format code with gofmt 2024-03-08 15:37:05 +01:00
e9e7ef2202 add new imageHandler again 2024-03-08 15:35:07 +01:00
123433d156 add new imageHandler 2024-03-08 15:32:44 +01:00
2 changed files with 53 additions and 9 deletions

View file

@ -21,6 +21,7 @@ var (
func main() { func main() {
http.HandleFunc("/", homeHandler) http.HandleFunc("/", homeHandler)
http.HandleFunc("/upload", uploadHandler) http.HandleFunc("/upload", uploadHandler)
http.HandleFunc("/image/", imageHandler)
http.HandleFunc("/view/", viewHandler) http.HandleFunc("/view/", viewHandler)
fmt.Println("Server listening on :8080") fmt.Println("Server listening on :8080")
@ -153,23 +154,54 @@ func uploadHandler(w http.ResponseWriter, r *http.Request) {
} }
} }
func imageHandler(w http.ResponseWriter, r *http.Request) {
// Extrahieren des Bildnamens aus dem URL-Pfad
imagePath := "./uploads/" + r.URL.Path[len("/image/"):]
// Stellen Sie sicher, dass das Bild existiert
if _, err := os.Stat(imagePath); os.IsNotExist(err) {
http.Error(w, "Bild nicht gefunden", http.StatusNotFound)
log.Printf("Bild nicht gefunden: %v", err)
return
}
// Setzen der korrekten MIME-Type basierend auf der Dateiendung
// Optional, verbessert aber die Kompatibilität
mimeType := "image/jpeg" // Standardwert; könnte dynamisch basierend auf der Dateiendung festgelegt werden
w.Header().Set("Content-Type", mimeType)
// Ausliefern des Bildes
http.ServeFile(w, r, imagePath)
}
func viewHandler(w http.ResponseWriter, r *http.Request) { func viewHandler(w http.ResponseWriter, r *http.Request) {
filePath := r.URL.Path[len("/view/"):] filePath := r.URL.Path[len("/view/"):]
imagePath := "./uploads/" + filePath imagePath := "./uploads/" + filePath
// Öffnen und Lesen der Bilddatei // Überprüfen, ob die Bilddatei existiert
imageFile, err := os.Open(imagePath) if _, err := os.Stat(imagePath); os.IsNotExist(err) {
if err != nil {
http.Error(w, "Bild nicht gefunden", http.StatusNotFound) http.Error(w, "Bild nicht gefunden", http.StatusNotFound)
log.Printf("Fehler beim Öffnen des Bildes: %v", err) log.Printf("Bild nicht gefunden: %v", err)
return return
} }
defer imageFile.Close()
// Kopieren des Bildes in die HTTP-Antwort // Verwenden von html/template zur sicheren Ausgabe von HTML
_, copyErr := io.Copy(w, imageFile) tmpl, err := template.ParseFiles("templates/viewImage.html")
if copyErr != nil { if err != nil {
log.Printf("Fehler beim Senden des Bildes: %v", copyErr) http.Error(w, "Fehler beim Laden des Templates", http.StatusInternalServerError)
log.Printf("Fehler beim Laden des Templates: %v", err)
return return
} }
data := struct {
Filename string
}{
Filename: filePath,
}
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)
}
} }

12
templates/viewImage.html Normal file
View file

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
<head>
<title>Bild anzeigen</title>
</head>
<body>
<h1>Bildanzeige</h1>
<!-- Verwenden des neuen Handlers für die Bild-URL -->
<img src="/image/{{.Filename}}" alt="Hochgeladenes Bild">
<p><a href="/">Zurück zum Upload</a></p>
</body>
</html>