diff --git a/backend/b2/b2.go b/backend/b2/b2.go index f1b0acc31..18c860b62 100644 --- a/backend/b2/b2.go +++ b/backend/b2/b2.go @@ -1930,11 +1930,15 @@ func (o *Object) Update(ctx context.Context, in io.Reader, src fs.ObjectInfo, op return err } } else if size > int64(o.fs.opt.UploadCutoff) { - _, err := multipart.UploadMultipart(ctx, src, in, multipart.UploadMultipartOptions{ + chunkWriter, err := multipart.UploadMultipart(ctx, src, in, multipart.UploadMultipartOptions{ Open: o.fs, OpenOptions: options, }) - return err + if err != nil { + return err + } + up := chunkWriter.(*largeUpload) + return o.decodeMetaDataFileInfo(up.info) } modTime := src.ModTime(ctx) diff --git a/backend/b2/upload.go b/backend/b2/upload.go index c53ecedfb..206c7abe4 100644 --- a/backend/b2/upload.go +++ b/backend/b2/upload.go @@ -85,6 +85,7 @@ type largeUpload struct { uploads []*api.GetUploadPartURLResponse // result of get upload URL calls chunkSize int64 // chunk size to use src *Object // if copying, object we are reading from + info *api.FileInfo // final response with info about the object } // newLargeUpload starts an upload of object o from in with metadata in src @@ -352,7 +353,8 @@ func (up *largeUpload) Close(ctx context.Context) error { if err != nil { return err } - return up.o.decodeMetaDataFileInfo(&response) + up.info = &response + return nil } // Abort aborts the large upload