go - 来自http的zip文件中的内容

时间:2014-11-20 16:15:28

标签: go

我正在github.com/remyoudompheng/go-misc/zipfs查看来自http。

的zip文件中的内容

这个最小的例子有效,我可以得到 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吗?

1 个答案:

答案 0 :(得分:0)

您需要调用您创建的处理程序。尝试将servezip中的最后一行更改为

http.StripPrefix("/zip/", http.FileServer(zipfs.NewZipFS(&z.Reader))).ServeHTTP(res, req)