in sdk/Common/ResumableUploadManager.cs [91:133]
private void DoResumableUploadSingleThread(string bucketName, string key, ResumableContext resumableContext, Stream fs,
EventHandler<StreamTransferProgressArgs> uploadProgressCallback)
{
var uploadedBytes = resumableContext.GetUploadedBytes();
foreach (var part in resumableContext.PartContextList)
{
if (part.IsCompleted)
{
continue;
}
fs.Seek(part.Position, SeekOrigin.Begin);
var originalStream = fs;
if (uploadProgressCallback != null)
{
originalStream = _ossClient.SetupProgressListeners(originalStream,
fs.Length,
uploadedBytes,
_conf.ProgressUpdateInterval,
uploadProgressCallback);
}
var request = new UploadPartRequest(bucketName, key, resumableContext.UploadId)
{
InputStream = originalStream,
PartSize = part.Length,
PartNumber = part.PartId,
RequestPayer = _request.RequestPayer,
TrafficLimit = _request.TrafficLimit
};
var partResult = _ossClient.UploadPart(request);
part.PartETag = partResult.PartETag;
part.IsCompleted = true;
if (partResult.ResponseMetadata.ContainsKey(HttpHeaders.HashCrc64Ecma))
{
part.Crc64 = ulong.Parse(partResult.ResponseMetadata[HttpHeaders.HashCrc64Ecma]);
}
resumableContext.Dump();
uploadedBytes += part.Length;
}
}