|
@@ -115,53 +115,87 @@ namespace SAGA.MBI.RequestData
|
|
|
FloorFileOperate.BakFile(fullPath);
|
|
|
string key = $"{MBIConst.OssClientFileKey}{cloudName}";
|
|
|
OssClient client = new OssClient(MBIConst.Endpoint, MBIConst.AccessKeyId, MBIConst.AccessKeySecret);
|
|
|
+ int timeoutNum = 20;
|
|
|
+ long totalLength = 0;
|
|
|
try
|
|
|
{
|
|
|
string bucketName = MBIConst.BucketName;
|
|
|
|
|
|
ShowDownloadWindow(tuple.Item3, fullPath, count, cur);
|
|
|
-
|
|
|
var getObjectRequest = new GetObjectRequest(bucketName, key);
|
|
|
- getObjectRequest.StreamTransferProgress += DownStreamProgressCallback;
|
|
|
- OssObject ossObject = client.GetObject(getObjectRequest);
|
|
|
- //设置下载超时时间
|
|
|
- ossObject.ResponseStream.ReadTimeout = 20*60*1000;
|
|
|
- using (var stream = ossObject.Content)
|
|
|
+ //getObjectRequest.StreamTransferProgress += DownStreamProgressCallback;
|
|
|
+ var buffer = new byte[1024 * 1024];
|
|
|
+ long stargIndex = 0;
|
|
|
+ getObjectRequest.StreamTransferProgress += (s, args) =>
|
|
|
+ {
|
|
|
+
|
|
|
+ var tempTrans = stargIndex + args.TransferredBytes;
|
|
|
+ var tempTotal = stargIndex + args.TotalBytes;
|
|
|
+ var currentData = Math.Round(((double)tempTrans)/ tempTotal *100d, 3);
|
|
|
+ Debug.WriteLine("ProgressCallback - TotalBytes:{0}M, TransferredBytes:{1}M,上传百分比:{2}%",
|
|
|
+ Math.Round(tempTotal / 1024d / 1024,3), Math.Round(tempTrans / 1024d / 1024,3), currentData);
|
|
|
+ windown?.Update(currentData);
|
|
|
+ if (currentData >= 100d && windown.Count == windown.Cur)
|
|
|
+ {
|
|
|
+ //MessageBox.Show("数据上传完毕!");
|
|
|
+ CloseDownloadWin(true, false);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ using (var fs = new MemoryStream())
|
|
|
{
|
|
|
- var buffer = new byte[1024 * 1024];
|
|
|
- using (var fs = new System.IO.MemoryStream())
|
|
|
+ ReDownload:
|
|
|
+ getObjectRequest.SetRange(stargIndex, -1);
|
|
|
+ OssObject ossObject = client.GetObject(getObjectRequest);
|
|
|
+ //设置下载超时时间
|
|
|
+ ossObject.ResponseStream.ReadTimeout = 60 * 1000;//*20;
|
|
|
+ if (totalLength == 0)
|
|
|
+ {
|
|
|
+ totalLength = ossObject.ContentLength;
|
|
|
+ }
|
|
|
+ using (var stream = ossObject.Content)
|
|
|
{
|
|
|
var bytesRead = 0;
|
|
|
- while (( bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
|
|
|
+ try
|
|
|
{
|
|
|
- // Process read data
|
|
|
- // TODO
|
|
|
- fs.Write(buffer, 0, bytesRead);
|
|
|
+ while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
|
|
|
+ {
|
|
|
+ fs.Write(buffer, 0, bytesRead);
|
|
|
+ }
|
|
|
}
|
|
|
- //写入文件
|
|
|
- FileStreamOperate.WriteFile(fs.ToArray(), fullPath);
|
|
|
-
|
|
|
- #region 下载后Md5较验
|
|
|
-
|
|
|
- string md5 = MD5Tools.GetMD5HashFromFileByBase64(fullPath);
|
|
|
- //下载后的文件md5校验
|
|
|
- if (client.GetObjectMetadata(bucketName, key).ContentMd5 != md5)
|
|
|
+ catch (WebException e)
|
|
|
{
|
|
|
- string per = (fs.Length/(double)ossObject.Content.Length)*100+"%";
|
|
|
- string errorMessage=($"楼层 {floorName} MD5校验失败,本地与服务器不一致!下载进度{per}");
|
|
|
- MailLog.Log("下载MD5异常", errorMessage);
|
|
|
- MessageShowBase.Infomation(errorMessage);
|
|
|
- result = false;
|
|
|
- //f1层一致提示失败
|
|
|
- //throw new Exception(errorMessage);
|
|
|
+ #region 超时重试
|
|
|
+ timeoutNum--;
|
|
|
+ if (0 < timeoutNum && e.Message.Contains("超时"))
|
|
|
+ {
|
|
|
+ stargIndex = fs.Length;
|
|
|
+ goto ReDownload;
|
|
|
+ }
|
|
|
+ throw;
|
|
|
+ #endregion
|
|
|
+ }
|
|
|
+ if (fs.Length < totalLength)
|
|
|
+ {
|
|
|
+ stargIndex = fs.Length;
|
|
|
+ goto ReDownload;
|
|
|
}
|
|
|
|
|
|
- #endregion
|
|
|
+ }
|
|
|
|
|
|
+ FileStreamOperate.WriteFile(fs.ToArray(), fullPath);
|
|
|
+ #region 下载后Md5较验
|
|
|
+ string md5 = MD5Tools.GetMD5HashFromFileByBase64(fullPath);
|
|
|
+ //下载后的文件md5校验
|
|
|
+ if (client.GetObjectMetadata(bucketName, key).ContentMd5 != md5)
|
|
|
+ {
|
|
|
+ string per =Math.Round((fs.Length / (double)totalLength) * 100,3) + "%";
|
|
|
+ string errorMessage = ($"楼层 {floorName} MD5校验失败,本地与服务器不一致!下载进度{per}");
|
|
|
+ MailLog.Log("下载MD5异常", errorMessage);
|
|
|
+ MessageShowBase.Infomation(errorMessage);
|
|
|
+ result = false;
|
|
|
}
|
|
|
+ #endregion
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
Log4Net.Debug($"Get object:{key} succeeded");
|
|
|
}
|
|
|
catch (Exception ex)
|
|
@@ -180,14 +214,22 @@ namespace SAGA.MBI.RequestData
|
|
|
/// <param name="args"></param>
|
|
|
private static void DownStreamProgressCallback(object sender, StreamTransferProgressArgs args)
|
|
|
{
|
|
|
- var currentData = Math.Round(args.TransferredBytes * 100d / args.TotalBytes, 3);
|
|
|
- Debug.WriteLine("ProgressCallback - TotalBytes:{0}M, TransferredBytes:{1}M,上传百分比:{2}%",
|
|
|
- args.TotalBytes / 1024 / 1024, args.TransferredBytes / 1024 / 1024, currentData);
|
|
|
- windown?.Update(currentData);
|
|
|
- if (currentData >= 100d && windown.Count == windown.Cur)
|
|
|
+ try
|
|
|
{
|
|
|
- //MessageBox.Show("数据上传完毕!");
|
|
|
- CloseDownloadWin(true, false);
|
|
|
+ var currentData = Math.Round(args.TransferredBytes * 100d / args.TotalBytes, 3);
|
|
|
+ Debug.WriteLine("ProgressCallback - TotalBytes:{0}M, TransferredBytes:{1}M,上传百分比:{2}%",
|
|
|
+ args.TotalBytes / 1024 / 1024, args.TransferredBytes / 1024 / 1024, currentData);
|
|
|
+ windown?.Update(currentData);
|
|
|
+ if (currentData >= 100d && windown.Count == windown.Cur)
|
|
|
+ {
|
|
|
+ //MessageBox.Show("数据上传完毕!");
|
|
|
+ CloseDownloadWin(true, false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+
|
|
|
+ throw;
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|