diff --git a/backend/s3/s3.go b/backend/s3/s3.go index 48af2e8e7..246077e3b 100644 --- a/backend/s3/s3.go +++ b/backend/s3/s3.go @@ -2928,7 +2928,9 @@ func (f *Fs) Copy(ctx context.Context, src fs.Object, remote string) (fs.Object, req := s3.CopyObjectInput{ MetadataDirective: types.MetadataDirectiveCopy, } - + if srcObj.storageClass != nil { + req.StorageClass = types.StorageClass(*srcObj.storageClass) + } // Build upload options including headers and metadata ci := fs.GetConfig(ctx) uploadOptions := fs.MetadataAsOpenOptions(ctx) @@ -4501,7 +4503,12 @@ func (o *Object) prepareUpload(ctx context.Context, src fs.ObjectInfo, options [ ACL: types.ObjectCannedACL(o.fs.opt.ACL), Key: &bucketPath, } - + if tierObj, ok := src.(fs.GetTierer); ok { + tier := tierObj.GetTier() + if tier != "" { + ui.req.StorageClass = types.StorageClass(strings.ToUpper(tier)) + } + } // Fetch metadata if --metadata is in use meta, err := fs.GetMetadataOptions(ctx, o.fs, src, options) if err != nil {