FileServer()上の小さなラッパーはあなたの問題を解決します。今度は、認可を行うためのロジックを追加する必要があります。一意の名前を持つように見えるので、名前のマップを作成するだけでイメージ名をフィルタリングし、キー/ストア(memcached、redis)のようにもっと動的なものを追加することができます。など)あなたは、あなたは、人々が同じフォルダにこれらのイメージが、他のファイルにアクセスする必要はありませんコメント
package main
import (
"log"
"net/http"
"strings"
)
// put the allowed hashs or keys here
// you may consider put them in a key/value store
//
var allowedImages = map[string]bool{
"key-abc.jpg": true,
"key-123.jpg": true,
}
func main() {
http.Handle("/Images/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// here we can do any kind of checking, in this case we'll just split the url and
// check if the image name is in the allowedImages map, we can check in a DB or something
//
parts := strings.Split(r.URL.Path, "/")
imgName := parts[len(parts)-1]
if _, contains := allowedImages[imgName]; !contains { // if the map contains the image name
log.Printf("Not found image: %q path: %s\n", imgName, r.URL.Path)
// if the image is not found we write a 404
//
// Bonus: we don't list the directory, so nobody can know what's inside :)
//
http.NotFound(w, r)
return
}
log.Printf("Serving allowed image: %q\n", imgName)
fileServer := http.StripPrefix("/Images/", http.FileServer(http.Dir("./assets")))
fileServer.ServeHTTP(w, r) // StripPrefix() and FileServer() return a Handler that implements ServerHTTP()
}))
http.ListenAndServe(":8000", nil)
}
https://play.golang.org/p/ehrd_AWXim
を言っているに従うことを願って? – xen
@xenフォルダパス – Fantasim
でこのフォルダにファイルにアクセスしたくないのですがこれは問題ですか? https://groups.google.com/forum/#!topic/golang-nuts/bStLPdIVM6w – lofcek