azure-sdk-for-rust:如何获取文件的 Content-MD5?

问题描述 投票:0回答:1

我有一个使用“azure_storage_datalake”的 Rust 应用程序,位于 https://github.com/Azure/Azure-Sdk-for-rust。该应用程序可以枚举所有文件,并且我可以确定每个文件的名称和大小。我一直无法弄清楚如何获取每个文件的 Content-MD5。我希望获得该值,而不是必须扫描每个文件并即时确定 MD5 值。 Azure提供的RESTful API显示可以确定Content-MD5,

Azure 的内容 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;
        }
    }
}
azure rust azure-blob-storage azure-data-lake-gen2
1个回答
0
投票

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);

请注意,该解决方案未经测试。

© www.soinside.com 2019 - 2024. All rights reserved.