Compare commits
3 commits
08814b0e82
...
888036cf6c
Author | SHA1 | Date | |
---|---|---|---|
888036cf6c | |||
e9e7ef2202 | |||
123433d156 |
2 changed files with 53 additions and 9 deletions
50
go/main.go
50
go/main.go
|
@ -21,6 +21,7 @@ var (
|
|||
func main() {
|
||||
http.HandleFunc("/", homeHandler)
|
||||
http.HandleFunc("/upload", uploadHandler)
|
||||
http.HandleFunc("/image/", imageHandler)
|
||||
http.HandleFunc("/view/", viewHandler)
|
||||
|
||||
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) {
|
||||
filePath := r.URL.Path[len("/view/"):]
|
||||
imagePath := "./uploads/" + filePath
|
||||
|
||||
// Öffnen und Lesen der Bilddatei
|
||||
imageFile, err := os.Open(imagePath)
|
||||
if err != nil {
|
||||
// Überprüfen, ob die Bilddatei existiert
|
||||
if _, err := os.Stat(imagePath); os.IsNotExist(err) {
|
||||
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
|
||||
}
|
||||
defer imageFile.Close()
|
||||
|
||||
// Kopieren des Bildes in die HTTP-Antwort
|
||||
_, copyErr := io.Copy(w, imageFile)
|
||||
if copyErr != nil {
|
||||
log.Printf("Fehler beim Senden des Bildes: %v", copyErr)
|
||||
// Verwenden von html/template zur sicheren Ausgabe von HTML
|
||||
tmpl, err := template.ParseFiles("templates/viewImage.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 {
|
||||
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
12
templates/viewImage.html
Normal 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>
|
Loading…
Reference in a new issue