summaryrefslogtreecommitdiff
path: root/fs.go
diff options
context:
space:
mode:
Diffstat (limited to 'fs.go')
-rw-r--r--fs.go20
1 files changed, 18 insertions, 2 deletions
diff --git a/fs.go b/fs.go
index 4ccfd45..864570b 100644
--- a/fs.go
+++ b/fs.go
@@ -230,12 +230,28 @@ func (fs *Fs) newObjectWriter(key string) (io.WriteCloser, context.CancelFunc, <
errc := make(chan error, 1)
go func() {
- b, err := io.ReadAll(r)
+ maxAtomicSize := int64(16 * (1 << 20))
+ lr := io.LimitReader(r, maxAtomicSize)
+ b, err := io.ReadAll(lr)
if err != nil {
errc <- err
return
}
- _, err = fs.client.PutObject(ctx, fs.bucket, key, bytes.NewReader(b), int64(len(b)), minio.PutObjectOptions{})
+ if ctx.Err() != nil {
+ errc <- ctx.Err()
+ return
+ }
+ var rd io.Reader
+ var size int64
+ if int64(len(b)) == maxAtomicSize {
+ rd = io.MultiReader(bytes.NewReader(b), r)
+ size = -1
+ } else {
+ rd = bytes.NewReader(b)
+ size = int64(len(b))
+ }
+
+ _, err = fs.client.PutObject(ctx, fs.bucket, key, rd, size, minio.PutObjectOptions{})
errc <- fromErrorResponse(err)
}()