如何通过HTTP处理大文件而不将请求存储在临时文件中

问题描述 投票:0回答:1

我想将具有较大文件有效负载(最多几个gb)的get请求提交给golang服务器,但不是让它将多部分主体存储在文件系统上,然后将文件内容复制到缓冲区中,转发它,我想在请求到达时将请求的主体转发给另一个服务(不存储任何内容)。以下是修改后的(来自How can I receive an uploaded file using a Golang net/http server?的)工作示例,用于发布请求:

func ReceiveFile(w http.ResponseWriter, r *http.Request) {
    var Buf bytes.Buffer
    file, header, err := r.FormFile("file")
    if err != nil {
        panic(err)
    }
    defer file.Close()
    io.Copy(&Buf, file)
    // stream Buf to grpc server
    Buf.Reset()
    return
}
http go stream
1个回答
1
投票

如果要处理大型的多部分数据,则应避免解析整个请求正文。相反,请使用multipart包并以流的形式读取请求正文(以下省略了错误处理):

© www.soinside.com 2019 - 2024. All rights reserved.