【发布时间】:2020-12-26 00:52:50
【问题描述】:
我有这个非常简单的代码来提供一些文件:
wd, _ := os.Getwd()
fs := http.FileServer(http.Dir(filepath.Join(wd,"../", "static")))
r.Handle("/static", fs)
但这会引发 404 错误。
这个目录是相对于我的 cmd/main.go 的,我也尝试过它相对于当前包,我也尝试过 os.Getwd(),但它不起作用。请注意,我将“不工作”称为“不给出任何错误并返回 404 代码”。
我希望,当访问 http://localhost:port/static/afile.png 时,服务器会返回这个文件,以及预期的 mime 类型。
这是我的项目结构:
- cmd
main.go (main entry)
- static
afile.png
- internal
- routes
static.go (this is where this code is being executed)
go.mod
go.sum
请注意,我也尝试使用 filepath.Join()
我也尝试了其他替代方法,但它们也给出了 404 错误。
编辑:这是 static.go 的 os.Getwd() 输出:
/mnt/Files/Projects/backend/cmd(如预期)
这是 fmt.Println(filepath.Join(wd, "../", "static")) 结果 /mnt/Files/Projects/后端/静态
【问题讨论】:
-
您可以在问题中添加请求吗?
-
当您说“也尝试使用 os.Getwd()”时,您的意思是什么(
os.Getwd返回当前工作目录;将输出添加到您的问题将是有益的)。正如所写,../static将与当前工作目录相关(可能是也可能不是您的cmd文件夹;这取决于您运行应用程序的方式)。 -
塞拉夫,你是什么意思?
-
感谢您的更新 - 我假设您在
/mnt/Files/Projects/backend/static中有相关文件。 Seraf 将寻找您请求的 URL;值得注意的是完整的请求(即http://127.0.0.1/test.html)和您希望返回的文件的完整路径(在检查文件是否存在之后)。我们正在寻找足够的细节来复制您的问题(Minimal, Reproducible Example 会很棒)。 -
好的,我将完成信息并进行回购。感谢您的关注。