2016-03-20 7 views
2

Vielleicht schaue ich auf die falschen Stellen, aber ich kann kein Beispiel für die Verwendung von go.rice mit http.ServeFile() finden. Grundsätzlich möchte ich eine Box-Datei mit http.ServeFile() servieren. Was ich jetzt habe, ist folgendes. Wie Sie sehen können, suche ich nach einer Möglichkeit, den String-Speicherort einer Box-Datei zu erhalten, da http.ServeFile dies erfordert. Ich weiß nicht, wie ich es bekommen soll. Irgendwelche Vorschläge?Verwenden Sie go.rice mit http.ServeFile()

var StaticBox *rice.Box 

func NewStaticBox() { 
    StaticBox = rice.MustFindBox("../../static") 
} 

func Static(req *http.Request, resp *http.Response) { 
    stringToBoxedFile := WHAT-TO-DO-HERE 
    http.ServeFile(req, resp, stringToBoxedFile) 
} 

Ich kann die rice.box auf verschiedene Arten verwenden. Ich kann einen Dateiinhalt als String mit StaticBox.String() usw. bekommen. Aber jetzt möchte ich einen String als "location" zu einer Boxed-Datei.

Antwort

3

Sie könnten stattdessen http.ServeContent verwenden. Holen Sie sich HTTPBox und verwenden Sie HTTPBox.Open, um eine http.File zu erhalten, die io.ReadSeeker implementiert, damit sie mit ServeContent verwendet werden kann.

Alternativ können Sie HTTPBox mit http.FileServer verwenden, wie in der Dokumentation von go.rice vorgeschlagen (http.FileServer wird den Pfad der Anfrage abrufen und diesen als Dateinamen verwenden, um die Datei in der Box zu finden.)

2

Es ist eigentlich eine sehr einfache und kurze Lösung zu erreichen, was Sie wollen:

func main() { 
box := rice.MustFindBox("../../static") 
http.Handle("/", http.FileServer(box.HTTPBox())) 
http.ListenAndServe(":8080", nil) 
} 
Verwandte Themen