Extract content type detection to its own method.
Signed-off-by: David Calavera <david.calavera@gmail.com>
This commit is contained in:
parent
231cc3ae51
commit
62f6b6d87f
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user