mirror of
https://github.com/rclone/rclone.git
synced 2024-11-22 16:34:30 +01:00
rest: fix upload of 0 length files
Before this change if ContentLength was set in the options but 0 then we would upload using chunked encoding. Fix this to always upload with a "Content-Length" header even if the size is 0. Remove workarounds for this from b2 and onedrive backends. This fixes the issue for the webdav backend described here: https://forum.rclone.org/t/code-500-errors-with-webdav-nextcloud/8440/
This commit is contained in:
parent
2fc095cd3e
commit
5f0a8a4e28
@ -1500,11 +1500,6 @@ func (o *Object) Update(in io.Reader, src fs.ObjectInfo, options ...fs.OpenOptio
|
|||||||
},
|
},
|
||||||
ContentLength: &size,
|
ContentLength: &size,
|
||||||
}
|
}
|
||||||
// for go1.8 (see release notes) we must nil the Body if we want a
|
|
||||||
// "Content-Length: 0" header which b2 requires for all files.
|
|
||||||
if size == 0 {
|
|
||||||
opts.Body = nil
|
|
||||||
}
|
|
||||||
var response api.FileInfo
|
var response api.FileInfo
|
||||||
// Don't retry, return a retry error instead
|
// Don't retry, return a retry error instead
|
||||||
err = o.fs.pacer.CallNoRetry(func() (bool, error) {
|
err = o.fs.pacer.CallNoRetry(func() (bool, error) {
|
||||||
|
@ -1560,10 +1560,6 @@ func (o *Object) uploadSinglepart(in io.Reader, size int64, modTime time.Time) (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if size == 0 {
|
|
||||||
opts.Body = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
err = o.fs.pacer.Call(func() (bool, error) {
|
err = o.fs.pacer.Call(func() (bool, error) {
|
||||||
resp, err = o.fs.srv.CallJSON(&opts, nil, &info)
|
resp, err = o.fs.srv.CallJSON(&opts, nil, &info)
|
||||||
if apiErr, ok := err.(*api.Error); ok {
|
if apiErr, ok := err.(*api.Error); ok {
|
||||||
|
@ -198,7 +198,17 @@ func (api *Client) Call(opts *Opts) (resp *http.Response, err error) {
|
|||||||
if opts.Parameters != nil && len(opts.Parameters) > 0 {
|
if opts.Parameters != nil && len(opts.Parameters) > 0 {
|
||||||
url += "?" + opts.Parameters.Encode()
|
url += "?" + opts.Parameters.Encode()
|
||||||
}
|
}
|
||||||
req, err := http.NewRequest(opts.Method, url, opts.Body)
|
body := opts.Body
|
||||||
|
// If length is set and zero then nil out the body to stop use
|
||||||
|
// use of chunked encoding and insert a "Content-Length: 0"
|
||||||
|
// header.
|
||||||
|
//
|
||||||
|
// If we don't do this we get "Content-Length" headers for all
|
||||||
|
// files except 0 length files.
|
||||||
|
if opts.ContentLength != nil && *opts.ContentLength == 0 {
|
||||||
|
body = nil
|
||||||
|
}
|
||||||
|
req, err := http.NewRequest(opts.Method, url, body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user