diff --git a/core/services/cos/src/core.rs b/core/services/cos/src/core.rs index 9db6366d90f4..a53edf73e73f 100644 --- a/core/services/cos/src/core.rs +++ b/core/services/cos/src/core.rs @@ -615,6 +615,9 @@ pub struct CommonPrefix { #[serde(default, rename_all = "PascalCase")] pub struct ListObjectsOutputContent { pub key: String, + pub last_modified: String, + #[serde(rename = "ETag")] + pub etag: Option, pub size: u64, } @@ -719,6 +722,23 @@ mod tests { out.contents.iter().map(|v| v.size).collect::>(), [9, 10], ); + assert_eq!( + out.contents + .iter() + .map(|v| v.last_modified.clone()) + .collect::>(), + ["2015-07-01T02:11:19.775Z", "2015-07-01T02:11:19.775Z"], + ); + assert_eq!( + out.contents + .iter() + .map(|v| v.etag.clone()) + .collect::>>(), + [ + Some("\"a72e382246ac83e86bd203389849e71d\"".to_string()), + Some("\"a72e382246ac83e86bd203389849e71d\"".to_string()), + ], + ); assert_eq!( out.common_prefixes .iter() diff --git a/core/services/cos/src/lister.rs b/core/services/cos/src/lister.rs index 182a50df768b..92ff6e58b725 100644 --- a/core/services/cos/src/lister.rs +++ b/core/services/cos/src/lister.rs @@ -90,7 +90,13 @@ impl oio::PageList for CosLister { path = "/".to_string(); } - let meta = Metadata::new(EntryMode::from_path(&path)).with_content_length(object.size); + let mut meta = + Metadata::new(EntryMode::from_path(&path)).with_content_length(object.size); + meta.set_last_modified(object.last_modified.parse::()?); + if let Some(etag) = object.etag { + meta.set_etag(&etag); + meta.set_content_md5(etag.trim_matches('"')); + } let de = oio::Entry::with(path, meta); ctx.entries.push_back(de);