You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++实现多线程上传大文件至Azure并进行完整性校验

多线程上传Azure Blob并实现完整性校验的方案

直接支持的函数方案

明确说:UploadBlockBlobFromOptions可以同时实现多线程上传和完整性校验,你之前的认知有遗漏。

  • 多线程上传:通过UploadBlockBlobFromOptions内的TransferOptions.Concurrency设置并行线程数,SDK底层会自动拆分文件块完成并行上传,这部分你的理解是对的。
  • 完整性校验:UploadBlockBlobFromOptions继承自UploadBlockBlobOptions,因此同样包含TransactionalContentHash字段。你只需预先计算文件的哈希值,赋值给该字段,Azure存储服务就会在接收完文件后对比发送与接收的哈希值,不匹配则返回错误。

实现步骤示例

  1. 计算文件的ContentHash
    读取本地文件并计算SHA-256哈希值,封装为Azure::Storage::Blobs::ContentHash对象:

    #include <azure/storage/blobs.hpp>
    #include <fstream>
    #include <cryptopp/sha.h>
    
    Azure::Storage::Blobs::ContentHash CalculateFileHash(const std::string& filePath) {
        CryptoPP::SHA256 sha256;
        std::ifstream file(filePath, std::ios::binary);
        std::vector<unsigned char> buffer(4096);
        size_t bytesRead;
    
        while ((bytesRead = file.read(reinterpret_cast<char*>(buffer.data()), buffer.size()).gcount()) > 0) {
            sha256.Update(buffer.data(), bytesRead);
        }
    
        std::vector<unsigned char> hash(sha256.DigestSize());
        sha256.Final(hash.data());
    
        Azure::Storage::Blobs::ContentHash contentHash;
        contentHash.Sha256 = Azure::Core::Convert::Base64Encode(hash);
        return contentHash;
    }
    
  2. 配置上传选项并执行多线程上传
    设置并发数和哈希值,调用UploadBlockBlobFromFile完成上传:

    auto blobClient = Azure::Storage::Blobs::BlockBlobClient::CreateFromConnectionString(
        "你的存储连接字符串", "容器名称", "Blob名称");
    
    Azure::Storage::Blobs::UploadBlockBlobFromOptions options;
    // 设置多线程并发数
    options.TransferOptions.Concurrency = 4;
    // 设置完整性校验哈希
    options.TransactionalContentHash = CalculateFileHash("本地文件路径");
    
    auto response = blobClient.UploadBlockBlobFromFile("本地文件路径", options);
    

可选的本地二次校验

如果需要额外的本地验证,可在上传完成后调用GetBlobProperties获取Azure存储的Blob哈希值,与本地计算结果对比:

auto properties = blobClient.GetBlobProperties();
if (properties.Value.ContentHash.Sha256 == options.TransactionalContentHash.Value().Sha256) {
   // 校验通过
} else {
   // 校验失败,执行错误处理逻辑
}

内容的提问来源于stack exchange,提问作者Jakomo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:11:00