private bool UploadRange(Range r)
{
System.Net.WebClient client = new System.Net.WebClient();
client.Headers.Add("Content-Range",
"bytes " + r.pos.ToString() + "-" + (r.end - 1).ToString() + "/" + fileSize.ToString());
byte[] data = new byte[r.Len()];
fs.Seek(r.pos, SeekOrigin.Begin);
int len = fs.Read(data, 0, (int)r.Len());
if (len != r.Len())
{
throw new IOException("unable read expected size.");
}
client.Headers.Add("Content-MD5", CalcMD5Hex(data));
client.UploadProgressChanged += new System.Net.UploadProgressChangedEventHandler(OnRangeUploadProgressChanged);
client.UploadDataCompleted += new System.Net.UploadDataCompletedEventHandler(OnRangeUploadDataCompleted);
UploadInfo info = new UploadInfo();
info.wc = client;
info.totalBytes = len;
info.uploadedBytes = 0;
uploadInfos[client] = info;
client.UploadDataAsync(new Uri(uploadUrl), "POST", data, client);
return(true);
}