如何从公用文件夹发回Go中的图像?
我是新手,如果这是一个明显的问题,那么很抱歉,我没有找到任何东西,所以我在这里发布 这实际上是一个由两部分组成的问题 1) 所以我的项目目录中有这个web文件夹。它是公共的,我有一个中间件功能,用于检查JWT 我使用这个逻辑来避免JWT auth,但它现在起作用了。我得到了如何从公用文件夹发回Go中的图像?,go,gorilla,Go,Gorilla,我是新手,如果这是一个明显的问题,那么很抱歉,我没有找到任何东西,所以我在这里发布 这实际上是一个由两部分组成的问题 1) 所以我的项目目录中有这个web文件夹。它是公共的,我有一个中间件功能,用于检查JWT 我使用这个逻辑来避免JWT auth,但它现在起作用了。我得到了未经授权的 // List of endpoints that don't require auth by an access token notAuth := []string{"/", "/refresht
未经授权的
// List of endpoints that don't require auth by an access token
notAuth := []string{"/", "/refreshtokens", "/students/signup", "/students/signin", "/students/forgotpassword",
"/images"}
// Current request path
requestPath := r.URL.Path
// Check if the request does not need authentication, serve the request if it doesn't need it
for _, value := range notAuth {
if value == requestPath {
next.ServeHTTP(w, r)
return
}
}
那么,我如何将这个URL放入数组中,以便它能够逃过JWT授权呢
2) 这就是我将文件夹公开的方式,但我不希望这样
router.PathPrefix("/images").Handler(http.StripPrefix("/images", http.FileServer(http.Dir("./web/"))))
我想要的是
router.Handle("/image/{imageName}",func(w http.ResponseWriter, request *http.Request){
http.ServeFile(this image name file)
})
这样我就可以发回请求的文件
任何帮助都将不胜感激。对于#1:显然请求路径不是notAuth
中的路径。也许您需要检查路径是否有包含在notAuth
中的前缀?如果是这样,您需要小心/
,因为它将通过所有路径。如果没有,请记录请求路径并查看问题所在
对于#2:你应该能够做到:
http.ServeFile(w,request,filepath.Join(baseDir,mux.Vars(request)["imageName"])
如何执行此前缀
操作?您可以执行:if strings.HasPrefix(requestPath,value)
检查requestPath
是否有前缀值
。确保notAuth
路径以/结尾,否则任何匹配前缀都将起作用。而且,/
不能在notAuth
中,因为它会让一切都过去。它正在工作!但图像未打开,正在下载。您需要在响应中设置正确的内容类型。如果将内容类型设置为正确的图像mime类型,则应显示图像。如果响应的内容类型为:image/jpeg,则客户端应能够显示图像。我会检查一下客户端是否有问题。