diff options
| author | sparklxb <sparklxb@163.com> | 2017-01-08 09:16:29 +0800 |
|---|---|---|
| committer | sparklxb <sparklxb@163.com> | 2017-01-08 09:16:40 +0800 |
| commit | 86a7c562751fc89d52da30425f1513b4553dfa8c (patch) | |
| tree | 521bdcdf6e9791f0b58b9864f60be973f3923951 /weed/operation | |
| parent | 13e7069eb9cd72f94e72acb8fbbc9dd0307da703 (diff) | |
| download | seaweedfs-86a7c562751fc89d52da30425f1513b4553dfa8c.tar.xz seaweedfs-86a7c562751fc89d52da30425f1513b4553dfa8c.zip | |
support additional header name-value pairs
Diffstat (limited to 'weed/operation')
| -rw-r--r-- | weed/operation/submit.go | 6 | ||||
| -rw-r--r-- | weed/operation/upload_content.go | 28 |
2 files changed, 26 insertions, 8 deletions
diff --git a/weed/operation/submit.go b/weed/operation/submit.go index 1de6b544a..75d5afbde 100644 --- a/weed/operation/submit.go +++ b/weed/operation/submit.go @@ -155,7 +155,7 @@ func (fi FilePart) Upload(maxMB int, master string, secret security.Secret) (ret cm.DeleteChunks(master) } } else { - ret, e := Upload(fileUrl, baseName, fi.Reader, fi.IsGzipped, fi.MimeType, jwt) + ret, e := Upload(fileUrl, baseName, fi.Reader, fi.IsGzipped, fi.MimeType, nil, jwt) if e != nil { return 0, e } @@ -180,7 +180,7 @@ func upload_one_chunk(filename string, reader io.Reader, master, fileUrl, fid := "http://"+ret.Url+"/"+ret.Fid, ret.Fid glog.V(4).Info("Uploading part ", filename, " to ", fileUrl, "...") uploadResult, uploadError := Upload(fileUrl, filename, reader, false, - "application/octet-stream", jwt) + "application/octet-stream", nil, jwt) if uploadError != nil { return fid, 0, uploadError } @@ -198,6 +198,6 @@ func upload_chunked_file_manifest(fileUrl string, manifest *ChunkManifest, jwt s q := u.Query() q.Set("cm", "true") u.RawQuery = q.Encode() - _, e = Upload(u.String(), manifest.Name, bufReader, false, "application/json", jwt) + _, e = Upload(u.String(), manifest.Name, bufReader, false, "application/json", nil, jwt) return e } diff --git a/weed/operation/upload_content.go b/weed/operation/upload_content.go index a87784cad..b5784322a 100644 --- a/weed/operation/upload_content.go +++ b/weed/operation/upload_content.go @@ -36,13 +36,13 @@ func init() { var fileNameEscaper = strings.NewReplacer("\\", "\\\\", "\"", "\\\"") -func Upload(uploadUrl string, filename string, reader io.Reader, isGzipped bool, mtype string, jwt security.EncodedJwt) (*UploadResult, error) { +func Upload(uploadUrl string, filename string, reader io.Reader, isGzipped bool, mtype string, pairs []byte, jwt security.EncodedJwt) (*UploadResult, error) { return upload_content(uploadUrl, func(w io.Writer) (err error) { _, err = io.Copy(w, reader) return - }, filename, isGzipped, mtype, jwt) + }, filename, isGzipped, mtype, pairs, jwt) } -func upload_content(uploadUrl string, fillBufferFunction func(w io.Writer) error, filename string, isGzipped bool, mtype string, jwt security.EncodedJwt) (*UploadResult, error) { +func upload_content(uploadUrl string, fillBufferFunction func(w io.Writer) error, filename string, isGzipped bool, mtype string, pairs []byte, jwt security.EncodedJwt) (*UploadResult, error) { body_buf := bytes.NewBufferString("") body_writer := multipart.NewWriter(body_buf) h := make(textproto.MIMEHeader) @@ -59,6 +59,14 @@ func upload_content(uploadUrl string, fillBufferFunction func(w io.Writer) error if jwt != "" { h.Set("Authorization", "BEARER "+string(jwt)) } + pairMap := make(map[string]string) + if len(pairs) != 0 { + err := json.Unmarshal(pairs, &pairMap) + if err != nil { + glog.V(0).Infoln("Unmarshal pairs error:", err) + } + } + file_writer, cp_err := body_writer.CreatePart(h) if cp_err != nil { glog.V(0).Infoln("error creating form file", cp_err.Error()) @@ -73,7 +81,17 @@ func upload_content(uploadUrl string, fillBufferFunction func(w io.Writer) error glog.V(0).Infoln("error closing body", err) return nil, err } - resp, post_err := client.Post(uploadUrl, content_type, body_buf) + + req, postErr := http.NewRequest("POST", uploadUrl, body_buf) + if postErr != nil { + glog.V(0).Infoln("failing to upload to", uploadUrl, postErr.Error()) + return nil, postErr + } + req.Header.Set("Content-Type", content_type) + for k, v := range pairMap { + req.Header.Set(k, v) + } + resp, post_err := client.Do(req) if post_err != nil { glog.V(0).Infoln("failing to upload to", uploadUrl, post_err.Error()) return nil, post_err @@ -86,7 +104,7 @@ func upload_content(uploadUrl string, fillBufferFunction func(w io.Writer) error var ret UploadResult unmarshal_err := json.Unmarshal(resp_body, &ret) if unmarshal_err != nil { - glog.V(0).Infoln("failing to read upload resonse", uploadUrl, string(resp_body)) + glog.V(0).Infoln("failing to read upload response", uploadUrl, string(resp_body)) return nil, unmarshal_err } if ret.Error != "" { |
