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

How to send back an image in Go from the public folder?

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

这实际上是一个两部分的问题。

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

我正在使用此逻辑来避免 JWT 身份验证,但它现在可以正常工作了。我得到 unauthorized.

// 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) 这就是我制作文件夹的方式 public 但我不想要这个。

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"])