Merge pull request #311 from aofei/v2

api: fix a huge memory allocation caused by sendFiles
pull/313/head
Ian P Badtrousers 4 years ago committed by GitHub
commit aac3d680d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -81,26 +81,32 @@ func (b *Bot) sendFiles(method string, files map[string]File, params map[string]
return b.Raw(method, params)
}
var buf bytes.Buffer
writer := multipart.NewWriter(&buf)
for field, file := range rawFiles {
if err := addFileToWriter(writer, params["file_name"], field, file); err != nil {
return nil, wrapError(err)
pipeReader, pipeWriter := io.Pipe()
writer := multipart.NewWriter(pipeWriter)
go func() {
defer pipeWriter.Close()
for field, file := range rawFiles {
if err := addFileToWriter(writer, params["file_name"], field, file); err != nil {
pipeWriter.CloseWithError(wrapError(err))
return
}
}
}
for field, value := range params {
if err := writer.WriteField(field, value); err != nil {
return nil, wrapError(err)
for field, value := range params {
if err := writer.WriteField(field, value); err != nil {
pipeWriter.CloseWithError(wrapError(err))
return
}
}
}
if err := writer.Close(); err != nil {
return nil, wrapError(err)
}
if err := writer.Close(); err != nil {
pipeWriter.CloseWithError(wrapError(err))
return
}
}()
url := b.URL + "/bot" + b.Token + "/" + method
resp, err := b.client.Post(url, writer.FormDataContentType(), &buf)
resp, err := b.client.Post(url, writer.FormDataContentType(), pipeReader)
if err != nil {
return nil, wrapError(err)
}

Loading…
Cancel
Save