2015-04-03 23:53
浏览 36

使用Go / Negroni / Gorilla Mux从静态网址提供文件

So I am new to Go and trying it out to build a simple web server. One part I am having trouble with is that I want to serve static files with dynamic static urls (to enable long caching by the browser). For example, I might have this url:


But I want to serve the file located at:


How would I go about this with Go / Negroni / Gorilla Mux?

图片转代码服务由CSDN问答提供 功能建议

所以我是Go语言的新手,并尝试构建一个简单的Web服务器。 我遇到的麻烦之一是我想使用动态静态url提供静态文件(以使浏览器可以进行长时间缓存)。 例如,我可能有以下网址:


但我想 为位于以下位置的文件提供服务:


如何使用Go / Negroni / Gorilla Mux?

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

2条回答 默认 最新

  • dsg41888 2015-04-04 06:39

    Have you already decided on how to record/persist the "random" part of the URL? DB? In memory (i.e. not across restarts)? If not, crypto/sha1 the file(s) on start-up, and store the resultant SHA-1 hash in a map/slice.

    Otherwise, a route like (assuming Gorilla) r.Handle("/static/{cache_id}/{filename}", YourFileHandler) would work.

    package main
    import (
    func FileServer(w http.ResponseWriter, r *http.Request) {
        vars := mux.Vars(r)
        id := vars["cache_id"]
        // Logging for the example
        // Check if the id is valid, else 404, 301 to the new URL, etc - goes here!
        // (this is where you'd look up the SHA-1 hash)
        // Assuming it's valid
        file := vars["filename"]
        // Logging for the example
        // Super simple. Doesn't set any cache headers, check existence, avoid race conditions, etc.
        w.Header().Set("Content-Type", mime.TypeByExtension(filepath.Ext(file)))
        http.ServeFile(w, r, "/Users/matt/Desktop/"+file)
    func IndexHandler(w http.ResponseWriter, r *http.Request) {
    func main() {
        r := mux.NewRouter()
        r.HandleFunc("/", IndexHandler)
        r.HandleFunc("/static/{cache_id}/{filename}", FileServer)
        log.Fatal(http.ListenAndServe(":4000", r))

    That should work out of the box, but I can't promise it's production ready. Personally, I just use nginx to serve my static files and benefit from it's file handler cache, solid gzip implementation, etc, etc.

    解决 无用
    打赏 举报