in src/AlibabaCloud.OSS.V2/Client.ObjectBasic.cs [605:644]
private void AddDownloadCrcChecker(ref Models.RequestModel request, ref OperationInput input)
{
if (!_clientImpl.Options.FeatureFlags.HasFlag(FeatureFlagsType.EnableCrc64CheckDownload))
{
return;
}
Action<ResponseMessage> handler = x =>
{
if (x.Content == null || !x.Content.CanSeek)
{
return;
}
//skip Partial Content
if (x.StatusCode == 206)
{
return;
}
if (x.Headers.TryGetValue("x-oss-hash-crc64ecma", out var scrc))
{
var ccrc = "0";
if (x.Content.Length > 0)
{
var tracker = new WriteOnlyHashStream(new HashCrc64(0));
x.Content.CopyTo(tracker);
x.Content.Seek(0, SeekOrigin.Begin);
var val = tracker.Hash.Final();
ccrc = Convert.ToString(BitConverter.ToUInt64(val, 0), CultureInfo.InvariantCulture);
}
if (!string.Equals(ccrc, scrc))
{
x.Headers.TryGetValue("x-oss-request-id", out var requestId);
throw new InconsistentException(ccrc, scrc, requestId ?? "");
}
}
};
input.AddResponseHandler(handler);
}