diff --git a/tq/basic_upload.go b/tq/basic_upload.go index dd473276..8e7a3d37 100644 --- a/tq/basic_upload.go +++ b/tq/basic_upload.go @@ -72,23 +72,8 @@ func (a *basicUploadAdapter) DoTransfer(ctx interface{}, t *Transfer, cb Progres } defer f.Close() - if len(req.Header.Get("Content-Type")) == 0 { - buffer := make([]byte, 512) - n, err := f.Read(buffer) - if err != nil && err != io.EOF { - return errors.Wrap(err, "basic upload") - } - - contentType := http.DetectContentType(buffer[:n]) - if _, err := f.Seek(0, 0); err != nil { - return errors.Wrap(err, "basic upload") - } - - if contentType == "" { - contentType = defaultContentType - } - - req.Header.Set("Content-Type", contentType) + if err := setContentTypeFor(req, f); err != nil { + return err } // Ensure progress callbacks made while uploading @@ -188,3 +173,27 @@ func configureBasicUploadAdapter(m *Manifest) { return nil }) } + +func setContentTypeFor(req *http.Request, r io.ReadSeeker) error { + if len(req.Header.Get("Content-Type")) != 0 { + return nil + } + + buffer := make([]byte, 512) + n, err := r.Read(buffer) + if err != nil && err != io.EOF { + return errors.Wrap(err, "content type detect") + } + + contentType := http.DetectContentType(buffer[:n]) + if _, err := r.Seek(0, 0); err != nil { + return errors.Wrap(err, "content type rewind") + } + + if contentType == "" { + contentType = defaultContentType + } + + req.Header.Set("Content-Type", contentType) + return nil +}