From 029ffd2761ceea680feec9fee9143f049ea3a565 Mon Sep 17 00:00:00 2001 From: vupn0712 <126212736+vupn0712@users.noreply.github.com> Date: Sat, 20 Dec 2025 21:42:00 +0700 Subject: [PATCH] s3: fix Copy ignoring storage class Co-authored-by: sys6101 --- backend/s3/s3.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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 {