Extract content type detection to its own method.

Signed-off-by: David Calavera <david.calavera@gmail.com>
This commit is contained in:
David Calavera 2018-07-23 09:31:02 -07:00
parent 231cc3ae51
commit 62f6b6d87f
No known key found for this signature in database
GPG Key ID: DE3D437CCBECE2C4

@ -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
}