我正在github.com/remyoudompheng/go-misc/zipfs
查看来自http。
这个最小的例子有效,我可以得到 files / archives.zip 中包含的{FILE}:
的 http://localhost:8080/zip/{FILE}
package main
import (
"archive/zip"
"github.com/remyoudompheng/go-misc/zipfs"
"log"
"net/http"
)
func main() {
z, err := zip.OpenReader("files/archive.zip")
if err != nil {
log.Fatal(err)
}
defer z.Close()
http.Handle("/zip/", http.StripPrefix("/zip/", http.FileServer(zipfs.NewZipFS(&z.Reader))))
log.Fatal(http.ListenAndServe(":8080", nil))
}
现在,假设我想要像 http://localhost:8080/zip/{ZIPFILE}/{FILE}
这样的东西
我正在尝试注册一个功能但不起作用
package main
import (
"archive/zip"
"github.com/remyoudompheng/go-misc/zipfs"
"html"
"log"
"net/http"
"strings"
)
func servezip(res http.ResponseWriter, req *http.Request) {
zippath := "files/" + strings.Split(html.EscapeString(req.URL.Path), "/")[2] + ".zip"
z, err := zip.OpenReader(zippath)
if err != nil {
http.Error(res, err.Error(), 404)
return
}
defer z.Close()
http.StripPrefix("/zip/", http.FileServer(zipfs.NewZipFS(&z.Reader)))
}
func main() {
http.HandleFunc("/zip/", servezip)
log.Fatal(http.ListenAndServe(":8080", nil))
}
我错过了什么?可以使用handlefunc返回http.fileserver吗?
答案 0 :(得分:0)
您需要调用您创建的处理程序。尝试将servezip中的最后一行更改为
http.StripPrefix("/zip/", http.FileServer(zipfs.NewZipFS(&z.Reader))).ServeHTTP(res, req)