我想将具有较大文件有效负载(最多几个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
}
如果要处理大型的多部分数据,则应避免解析整个请求正文。相反,请使用multipart
包并以流的形式读取请求正文(以下省略了错误处理):