Ich bin ziemlich sicher, dass ich etwas offensichtlich übersehen habe, aber ich bin mir nicht sicher, was. Ich erstelle eine einfache Webanwendung, die Vorlagenvorlagen für Bücher bereitstellt. Die Vorlage funktioniert einwandfrei, und der Pfad für das Bild scheint korrekt zu füllen, aber ich erhalte immer einen Fehler 404 für das Bild selbst. HierGolang Webserver dient nicht als statische Dateien
ist die Vorlage:
<h1>{{.Title}}</h1>
<h2>{{.Author.Name}}</h2>
<image src="../images/{{.ImageURI}}" />
und hier ist die Anwendung selbst:
package main
import (
"html/template"
"log"
"net/http"
"time"
"github.com/gorilla/mux"
"github.com/user/marketplace/typelibrary"
)
var books []typelibrary.Book
func ItemHandler(w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
var selected typelibrary.Book
//Retrieve item data
for _, item := range books {
if item.ID == params["id"] {
selected = item
break
}
}
t, _ := template.ParseFiles("./templates/book.html")
t.Execute(w, selected)
}
func main() {
router := mux.NewRouter()
books = append(books, typelibrary.Book{ID: "1", Title: "The Fellowship of the Ring", ImageURI: "LotR-FotR.jpg", Author: &typelibrary.Author{Name: "JRR Tolkien"}})
books = append(books, typelibrary.Book{ID: "2", Title: "The Two Towers", ImageURI: "LotR-tTT.jpg", Author: &typelibrary.Author{Name: "JRR Tolkien"}})
books = append(books, typelibrary.Book{ID: "3", Title: "The Return of the King", ImageURI: "LotR-RotK.jpg", Author: &typelibrary.Author{Name: "JRR Tolkien"}})
books = append(books, typelibrary.Book{ID: "4", Title: "Monster Hunter International", ImageURI: "MHI1.jpg", Author: &typelibrary.Author{Name: "Larry Correia"}})
router.Handle("/", http.FileServer(http.Dir(".")))
router.Handle("/images/", http.FileServer(http.Dir("../images/")))
router.HandleFunc("/item/{id}", ItemHandler).Methods("GET")
srv := &http.Server{
Handler: router,
Addr: ":8080",
WriteTimeout: 10 * time.Second,
ReadTimeout: 10 * time.Second,
}
log.Fatal(srv.ListenAndServe())
}
Die Bilder im images
Unterverzeichnis gespeichert sind, direkt unter dem Verzeichnis, in dem die ausführbare Datei ist. Wenn ich versuche, das unterbrochene Bild auf der Seite anzuzeigen, wird der Pfad als localhost:8080/images/[imagename]
angezeigt, gibt aber einen 404-Fehler. Welche Konfigurations- oder Routing-Optionen fehle ich hier?
Sie übergeben fast sicher den falschen Pfad zu "http.Dir". Warum? ../? Führen Sie den Server aus einem Unterverzeichnis aus? Ich würde erwarten, dass Sie './Images /' basierend auf Ihrer Beschreibung wünschen. – Flimzy
@Flimzy Sie sind richtig, sollte es richtig sein './Images /', aber das Problem besteht auf jeden Fall weiter. – FreeRangeOyster
Wir kennen nicht Ihre Verzeichnisstruktur und wie Sie Ihren Server starten, aber diese Antworten enthalten die Lösung: [404 Seite nicht gefunden - Go Rendern CSS-Datei] (http://stackoverflow.com/questions/28293452/404-page -nicht gefunden-go-rendering-css-Datei/28294524 # 28294524); und [Warum muss ich http.StripPrefix verwenden, um auf meine statischen Dateien zuzugreifen?] (http://stackoverflow.com/questions/27945310/why-do-i-need-to-use-http-stripprefix-to-access -my-static-files/27946132 # 27946132) – icza