首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Go / Negroni / Gorilla Mux从静态url中提供文件

使用Go / Negroni / Gorilla Mux从静态url中提供文件
EN

Stack Overflow用户
提问于 2015-04-03 23:53:45
回答 2查看 1.9K关注 0票数 0

所以我是第一次尝试用它来构建一个简单的web服务器。我遇到的一个问题是,我希望使用动态静态urls (通过浏览器启用长缓存)为静态文件提供服务。例如,我可能有这个网址:

/static/876dsf5g87s6df5gs876df5g/application.js

但我想提供的文件位于:

/build/application.js

我该如何与围棋/内格罗尼/大猩猩穆克斯合作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-04 06:39:44

您是否已决定如何记录/持久化URL的“随机”部分?DB?在内存中(即不跨重启动)?如果没有,则在启动时对文件进行crypto/sha1,并将结果SHA-1哈希存储在映射/切片中。

否则,(假设大猩猩) r.Handle("/static/{cache_id}/{filename}", YourFileHandler)这样的路线就能工作。

代码语言:javascript
复制
package main

import (
    "log"
    "mime"
    "net/http"
    "path/filepath"

    "github.com/gorilla/mux"
)

func FileServer(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    id := vars["cache_id"]

    // Logging for the example
    log.Println(id)

    // 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
    log.Println(file)

    // 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) {
    w.Write([]byte("Hello!\n"))
}

func main() {

    r := mux.NewRouter()

    r.HandleFunc("/", IndexHandler)
    r.HandleFunc("/static/{cache_id}/{filename}", FileServer)

    log.Fatal(http.ListenAndServe(":4000", r))
}

那应该是开箱即用,但我不能保证它已经准备好生产了。就我个人而言,我只是使用nginx来服务我的静态文件,并从它的文件处理程序缓存、固态gzip实现等方面获益。

票数 4
EN

Stack Overflow用户

发布于 2019-08-27 14:55:43

我知道为时已晚,但也许我的回答也会对某人有所帮助。我找到了一个库去静态文件,它通过向文件名添加哈希来实现静态文件缓存和版本控制。因此,可以为资产文件设置长时间缓存,并且当它们更改时立即获得新的副本。另外,很容易实现模板函数,将链接到静态文件{{static "css/style.css"}}转换为真正的路径/static/css/style.d41d8cd98f00b204e9800998ecf8427e.css。阅读自述文件中的更多示例

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29441239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档