我是一个简单的文件夹:
Test/
main.go
Images/
image1.png
image2.png
index.html
在main main.go中,我只是说:
package main
import (
"net/http"
)
func main(){
fs := http.FileServer(http.Dir("./Images"))
http.Handle("/Images/*", fs)
http.ListenAndServe(":3003", nil)
}
但是当我卷曲 http://localhost:3003/Images/ 或甚至添加到路径文件的名称时,它都无法正常工作。 我不明白,因为它与给出的回复相同 this subject
你能告诉我这样做不行吗?
答案 0 :(得分:2)
您需要删除*
并添加额外的子文件夹Images
:
这很好用:
Test/
main.go
Images/
Images/
image1.png
image2.png
index.html
代码:
package main
import (
"net/http"
)
func main() {
fs := http.FileServer(http.Dir("./Images"))
http.Handle("/Images/", fs)
http.ListenAndServe(":3003", nil)
}
然后go run main.go
和
或者只是使用:
package main
import (
"net/http"
)
func main() {
fs := http.FileServer(http.Dir("./Images"))
http.Handle("/", fs)
http.ListenAndServe(":3003", nil)
}
答案 1 :(得分:1)
请求无法返回您的预期的原因是因为它们与http.Handle(pattern string, handler Handler)
调用中定义的模式不匹配。 ServeMux文档提供了如何组合模式的说明。任何请求都是从最具体到最不具体的前缀匹配的。看起来好像假设可以使用glob模式。您的处理程序已被调用/Images/*<file system path>
请求。您需要定义类似的目录路径Images/
。
另一方面,值得考虑一下您的程序如何获取提供文件的目录路径。硬编码相对意味着您的程序只能在文件系统中的特定位置运行,这非常脆弱。您可以使用命令行参数来允许用户指定路径或使用在运行时解析的配置文件。这些考虑因素使您的程序易于模块化和测试。
答案 2 :(得分:0)