aboutsummaryrefslogtreecommitdiff
path: root/weed/operation/upload_content.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/operation/upload_content.go')
-rw-r--r--weed/operation/upload_content.go25
1 files changed, 20 insertions, 5 deletions
diff --git a/weed/operation/upload_content.go b/weed/operation/upload_content.go
index b48d73deb..a1df07d7e 100644
--- a/weed/operation/upload_content.go
+++ b/weed/operation/upload_content.go
@@ -5,6 +5,7 @@ import (
"context"
"encoding/json"
"fmt"
+ "github.com/valyala/bytebufferpool"
"io"
"mime"
"mime/multipart"
@@ -32,6 +33,7 @@ type UploadOption struct {
Jwt security.EncodedJwt
RetryForever bool
Md5 string
+ BytesBuffer *bytes.Buffer
}
type UploadResult struct {
@@ -261,6 +263,7 @@ func doUploadData(data []byte, option *UploadOption) (uploadResult *UploadResult
PairMap: option.PairMap,
Jwt: option.Jwt,
Md5: option.Md5,
+ BytesBuffer: option.BytesBuffer,
})
if uploadResult == nil {
return
@@ -275,9 +278,17 @@ func doUploadData(data []byte, option *UploadOption) (uploadResult *UploadResult
}
func upload_content(fillBufferFunction func(w io.Writer) error, originalDataSize int, option *UploadOption) (*UploadResult, error) {
- buf := GetBuffer()
- defer PutBuffer(buf)
- body_writer := multipart.NewWriter(buf)
+ var body_writer *multipart.Writer
+ var reqReader *bytes.Reader
+ var buf *bytebufferpool.ByteBuffer
+ if option.BytesBuffer == nil {
+ buf = GetBuffer()
+ defer PutBuffer(buf)
+ body_writer = multipart.NewWriter(buf)
+ } else {
+ option.BytesBuffer.Reset()
+ body_writer = multipart.NewWriter(option.BytesBuffer)
+ }
h := make(textproto.MIMEHeader)
filename := fileNameEscaper.Replace(option.Filename)
h.Set("Content-Disposition", fmt.Sprintf(`form-data; name="file"; filename="%s"`, filename))
@@ -309,8 +320,12 @@ func upload_content(fillBufferFunction func(w io.Writer) error, originalDataSize
glog.V(0).Infoln("error closing body", err)
return nil, err
}
-
- req, postErr := http.NewRequest("POST", option.UploadUrl, bytes.NewReader(buf.Bytes()))
+ if option.BytesBuffer == nil {
+ reqReader = bytes.NewReader(buf.Bytes())
+ } else {
+ reqReader = bytes.NewReader(option.BytesBuffer.Bytes())
+ }
+ req, postErr := http.NewRequest("POST", option.UploadUrl, reqReader)
if postErr != nil {
glog.V(1).Infof("create upload request %s: %v", option.UploadUrl, postErr)
return nil, fmt.Errorf("create upload request %s: %v", option.UploadUrl, postErr)