如何从公用文件夹发回Go中的图像?

如何从公用文件夹发回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

我是新手,如果这是一个明显的问题,那么很抱歉,我没有找到任何东西,所以我在这里发布

这实际上是一个由两部分组成的问题

1) 所以我的项目目录中有这个web文件夹。它是公共的,我有一个中间件功能,用于检查JWT

我使用这个逻辑来避免JWT auth,但它现在起作用了。我得到了
未经授权的

// 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,则客户端应能够显示图像。我会检查一下客户端是否有问题。