gpt4 book ai didi

go - http请求.FormFile : handle zip files?

转载 作者:IT王子 更新时间:2023-10-29 01:14:39 25 4
gpt4 key购买 nike

我正在用 go 编写一个网络服务器。

在其中一个页面上,用户可以上传文件。

我希望能够处理 zip 文件。

archive/zip 包中,我只看到两个允许我从 zip 存档中读取的函数:

  1. func OpenReader(name string) (*ReadCloser, error)
  2. func NewReader(r io.ReaderAt, size int64) (*Reader, error)

我想避免从磁盘写入和读回,
如果我想使用第二个函数,我需要在调用该函数之前知道上传文件的大小。

问题

我会把我的问题分成两部分:

  1. 读取通过标准 multipart/form-data html 表单上传的 zip 文件的解压缩内容的惯用方法是什么?

  2. 如何获取通过 html 表单上传的文件的实际大小?

    func(req *http.Request) {
    f, h, err := req.FormFile("fileTag")
    if err != nil {
    panic(err)
    }
    var fileSize int = ??

    unzipper, err := zip.NewReader(f, fileSize)
    }

最佳答案

您可以在 FormFile 的 Header 中查找文件大小。 (这是一个 MIMEHEader )。

h.Header.Get("Content-Length")

如果文件没有content length,可以先读入一个buffer中得到大小。

var buff bytes.Buffer
fileSize, err := buff.ReadFrom(f)

其他选项是在您输入答案时搜索到最后,或者从界面中获取具体的阅读器。多部分文件如果在内存中,则为 *io.SectionReader,如果写入临时文件,则为 *os.File:

switch f := f.(type) {
case *io.SectionReader:
fileSize = r.Size()
case *os.File:
if s, err := f.Stat(); err == nil {
fileSize = s.Size()
}
}

关于go - http请求.FormFile : handle zip files?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22964950/

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