.NET 记录Amazon上传S3异常问题

上传文件至S3,提示AmazonS3Exception异常:The provided 'x-amz-content-sha256' header does not match what was computed.

确认了下,代码逻辑已经很久未动了。

没得办法,只能动用终极工具-二分查找,分段revert之前改动的代码,调试验证S3模块

回到半个月前的改动,发现S3上传逻辑是正常的。改动就是,升级了S3的亚马逊AWSSDK Nuget包。。。

使用Fiddler Http调试工具,看看request请求区别

x-amz-content-sha256这个参数,旧版本是STREAMING-AWS4-HMAC-SHA256-PAYLOAD,新版本增加了TRAILER后缀

俩者均是用于设置文件分块上传,区别在于是否支持在请求末尾动态添加元数据(Trailer)

STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER在传输完成后附加动态元数据,可以支持校验以及加密信息

x-amz-content-sha256参数是由S3部署服务器配置的,所以应该是.NET使用的AWSSDK.S3与S3服务器配置协议不匹配。

而我.NET代码中并未设置这类Headers参数。也就是AWSSDK.S3新版本,Stream类文件上传将默认headhers参数修改了。。。

找了下Github,AWSSDK未开源。但也有同学反馈新S3 SDK修改header参数问题:Support STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER signature in S3 PUT · Issue #9263 · getmoto/moto

所以, 不动S3服务器的情况下,.NET我回退AWSSDK.S3的Nuget版本3.7.400.3 解决此问题