2016-03-20 15 views
2

Belki de yanlış yerlere bakıyorum, ancak go.rice ürününü http.ServeFile() ile kullanmanın bir örneğini bulamıyorum. Temel olarak istediğim, http.ServeFile() numaralı kutulu bir dosyadır. Şimdi sahip olduğum şey şu. Gördüğünüz gibi, http.ServeFile bunu gerektirdiğinden kutulu bir dosyanın dize konumunu bulmanın bir yolunu arıyorum. Nasıl anlayacağımı bilmiyorum. Baska öneri?http.ServeFile() ile go.rice kullanın.

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) 
} 

Rice.box'ı çeşitli yollarla kullanabilirim. Bir dosya içeriğini StaticBox.String() vb. Ile bir dize olarak alabilirim. Ama şimdi kutulu bir dosyaya "konum" olarak bir dize istiyorum.

cevap

3

Bunun yerine http.ServeContent kullanabilirsiniz. HTTPBox'u edinin ve http://FileSeeker kullanan bir http.File almak için HTTPBox.Open kullanın, böylece ServeContent ile kullanılabilir.

Alternatif olarak, http.FileServer ile birlikte http.FileServer ile birlikte, http.FileServer belgesinde belirtildiği gibi kullanabilirsiniz (http.FileServer isteğin yolunu alır ve dosyayı kutuda bulmak için bir dosya adı olarak kullanır.)

2

istediğini elde etmek için çok basit ve kısa çözüm aslında yok:

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