我有一个使用“azure_storage_datalake”的 Rust 应用程序,位于 https://github.com/Azure/Azure-Sdk-for-rust。该应用程序可以枚举所有文件,并且我可以确定每个文件的名称和大小。我一直无法弄清楚如何获取每个文件的 Content-MD5。我希望获得该值,而不是必须扫描每个文件并即时确定 MD5 值。 Azure提供的RESTful API显示可以确定Content-MD5,
如果有任何有关如何使用“azure_storage_datalake”sdk 获取它的提示,我将不胜感激。
感谢您的时间和兴趣。
这是我一直在开发的代码:
let data_lake_client = DataLakeClient::new(
self.account_name.to_owned(),
self.storage_credentials.to_owned(),
);
let file_system_client = data_lake_client.file_system_client(container_name);
let directory_client = file_system_client.clone().into_directory_client(".");
let mut page_cnt = 0;
let mut cnt = 0;
let mut response = directory_client
.list_paths()
.directory("alm")
.recursive(true)
.max_results(NonZeroU32::new(paging_size).unwrap())
.into_stream()
.enumerate();
loop {
let page = response.next().await;
match page {
Some((_, p)) => match p {
Ok(_) => {
page_cnt += 1;
let paths = p.unwrap().paths;
cnt += paths.len();
paths.iter().for_each(|b| {
if !b.is_directory {
println!("[{}/{}]: {}, Size: {} bytes, MD5: '{}'",
page_cnt,
cnt,
b.name,
b.content_length as u64,
"tbd".to_string(), // <<<<< How to get the ContentMD5 value for this file?
);
}
});
}
Err(e) => {
println!("{:#?}", e);
break;
}
},
None => {
break;
}
}
}
在
if b.is_directory
分支中,您可以通过调用 FileClient
方法创建 file_system_client.get_file_client
实例。然后使用 get_properties
方法获取与文件关联的属性。这将包含您正在寻找的 MD5 详细信息。
let file_client = file_system_client.get_file_client(format!("{}/{}", "alm", b.name))
let properties = file_client.get_properties().await
println!("properties: {:?}", properties);
请注意,该解决方案未经测试。