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

AWS S3 SetContentMD5失效:设置任意值均能成功上传

关于AWS S3 PutObject请求中Content-MD5校验异常的问题

我希望通过MD5校验确保AWS S3接收到的内容与发送的一致,但发现向请求中设置任意内容都能成功上传至S3。

我编写的代码如下:

void put_object_buf(Aws::String& bucketName, Aws::String& objectName, S3::S3Client& s3_client)
{
    Aws::S3::Model::PutObjectRequest putObjectRequest;
    putObjectRequest.SetBucket(bucketName);

    std::shared_ptr<Aws::IOStream> bigStream = Create5MbStreamForUploadPart("La");

    putObjectRequest.SetBody(bigStream);
    putObjectRequest.SetContentLength(static_cast<long>(putObjectRequest.GetBody()->tellp()));
//    putObjectRequest.SetContentMD5(Aws::Utils::HashingUtils::Base64Encode(Aws::Utils::HashingUtils::CalculateMD5(*putObjectRequest.GetBody())));
    putObjectRequest.SetContentMD5("123");  // 仍然能成功上传
    putObjectRequest.SetKey(objectName);

    Aws::S3::Model::PutObjectOutcome outcome = s3_client.PutObject(putObjectRequest);

    if (!outcome.IsSuccess()) {
        std::cerr << "Error: PutObjectBuffer: " <<
                  outcome.GetError().GetMessage() << std::endl;
    }
    else {
        std::cout << "Success: Object '" << objectName << "' uploaded to bucket '" << bucketName << "'." << std::endl;
        std::cout << "outcome crc32: " << outcome.GetResult().GetChecksumCRC32() << std::endl;
        std::cout << "outcome etag: " << outcome.GetResult().GetETag() << std::endl;
    }
}

我尝试设置真实MD5和伪造MD5,均能正常完成上传。

此外,我发现AWS SDK日志中的PUT请求内容如下:

Host: xxx
Accept: */*
amz-sdk-invocation-id: xxx
amz-sdk-request: attempt=1
authorization: AWS4-HMAC-SHA256 Credential=xxx/20230412/xxx/s3/aws4_request, SignedHeaders=amz-sdk-invocation-id;amz-sdk-request;content-length;content-md5;content-type;host;x-amz-content-sha256;x-amz-date, Signature=xxx
content-length: 32
content-md5: Ipcfs07LlrdQhzZWTVN5/Q==
content-type: binary/octet-stream
user-agent: aws-sdk-cpp/1.11.0 Darwin/22.1.0 arm64 Clang/14.0.0
x-amz-content-sha256: UNSIGNED-PAYLOAD
x-amz-date: 20230412T021756Z
Expect: 100-continue

其中的content-md5并非我在请求中设置的值,这是否是AWS C++ SDK的Bug?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:32:40