gpt4 book ai didi

go - 在 http 中提供 zip 文件中的内容

转载 作者:数据小太阳 更新时间:2023-10-29 03:28:56 29 4
gpt4 key购买 nike

我正在查看 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}
这样的东西我正在尝试注册一个 func 但不起作用

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 吗?

最佳答案

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

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

关于go - 在 http 中提供 zip 文件中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27044349/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com