可以使用123盘正常更新
This commit is contained in:
149
Form1.cs
149
Form1.cs
@@ -161,10 +161,9 @@ namespace CheckDownload
|
||||
{
|
||||
CleanupNewFiles();
|
||||
UpdateStatus("下载在线MD5文件并读取...");
|
||||
|
||||
string tempFilePath = Path.Combine(_tempDirectory, Md5File);
|
||||
// 使用带备用方案的下载方法
|
||||
if (!await DownloadFileWithFallback(Md5File, tempFilePath))
|
||||
// 使用新的带123盘的下载方法
|
||||
if (!await DownloadMd5FileWithFallback(Md5File, tempFilePath))
|
||||
{
|
||||
UpdateStatus("下载在线MD5文件失败");
|
||||
await Task.Delay(3000);
|
||||
@@ -413,18 +412,28 @@ namespace CheckDownload
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 尝试下载单个文件
|
||||
/// 尝试下载单个文件(123盘主要,OSS备用)
|
||||
/// </summary>
|
||||
/// <param name="filePath">文件路径</param>
|
||||
/// <param name="expectedMd5">期望的MD5值</param>
|
||||
/// <returns>下载是否成功</returns>
|
||||
private async Task<bool> AttemptDownloadAsync(string filePath, string expectedMd5)
|
||||
{
|
||||
string ossKey = $"File/{expectedMd5}";
|
||||
string tempFilePath = Path.Combine(_tempDirectory, filePath);
|
||||
|
||||
try
|
||||
{
|
||||
// 1. 首先尝试从123盘下载
|
||||
UpdateStatus($"{Path.GetFileName(filePath)}");
|
||||
if (await DownloadFileFromOneDrive(filePath, expectedMd5, tempFilePath))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// 2. 如果123盘下载失败,使用阿里云OSS作为备用
|
||||
UpdateStatus($"123盘下载失败,尝试阿里云OSS备用方案: {Path.GetFileName(filePath)}");
|
||||
string ossKey = $"File/{expectedMd5}";
|
||||
|
||||
var client = new OssClient(OssEndpoint, OssAccessKeyId, OssAccessKeySecret);
|
||||
var obj = await Task.Run(() => client.GetObject(OssBucketName, ossKey));
|
||||
|
||||
@@ -438,11 +447,13 @@ namespace CheckDownload
|
||||
{
|
||||
await obj.Content.CopyToAsync(fileStream);
|
||||
}
|
||||
UpdateStatus($"阿里云OSS下载成功: {Path.GetFileName(filePath)}");
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex) when (ex is OssException || ex is WebException)
|
||||
{
|
||||
UpdateStatus($"主下载失败,尝试备用方案: {Path.GetFileName(filePath)}");
|
||||
UpdateStatus($"主下载失败,尝试OSS备用方案: {Path.GetFileName(filePath)}");
|
||||
string ossKey = $"File/{expectedMd5}";
|
||||
return await DownloadFileWithFallback(ossKey, tempFilePath);
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -452,6 +463,53 @@ namespace CheckDownload
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从123盘下载单个文件
|
||||
/// </summary>
|
||||
/// <param name="filePath">文件相对路径</param>
|
||||
/// <param name="expectedMd5">期望的MD5值</param>
|
||||
/// <param name="localPath">本地保存路径</param>
|
||||
/// <returns>下载是否成功</returns>
|
||||
private async Task<bool> DownloadFileFromOneDrive(string filePath, string expectedMd5, string localPath)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 在123盘中,文件是通过MD5值存储的,路径为 /File/{MD5值}
|
||||
string fileName = $"File/{expectedMd5}";
|
||||
|
||||
// 生成123盘鉴权URL
|
||||
string authUrl = GenerateAuthUrl(OneDriveLink, fileName);
|
||||
|
||||
// 创建HTTP请求
|
||||
var request = new HttpRequestMessage(HttpMethod.Get, authUrl);
|
||||
request.Headers.Add("User-Agent", "CheckDownload/1.0");
|
||||
|
||||
// 发送请求并获取响应
|
||||
var response = await _httpClient.SendAsync(request);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
// 读取文件数据
|
||||
byte[] fileData = await response.Content.ReadAsByteArrayAsync();
|
||||
|
||||
// 确保本地目录存在
|
||||
string localDir = Path.GetDirectoryName(localPath);
|
||||
if (!Directory.Exists(localDir))
|
||||
{
|
||||
Directory.CreateDirectory(localDir);
|
||||
}
|
||||
|
||||
// 保存文件到本地
|
||||
File.WriteAllBytes(localPath, fileData);
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"123盘下载文件失败: {filePath} - {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重试下载失败的文件
|
||||
/// </summary>
|
||||
@@ -1032,5 +1090,84 @@ namespace CheckDownload
|
||||
}
|
||||
return pathPart;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 带备用方案的在线MD5文件下载方法(123盘主要,OSS备用)
|
||||
/// </summary>
|
||||
/// <param name="fileName">要下载的文件名</param>
|
||||
/// <param name="localPath">本地保存路径</param>
|
||||
/// <returns>下载是否成功</returns>
|
||||
private async Task<bool> DownloadMd5FileWithFallback(string fileName, string localPath)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 1. 首先尝试从123盘下载
|
||||
UpdateStatus("尝试从123盘下载MD5文件...");
|
||||
if (await DownloadFromOneDrive(OneDriveLink, fileName, localPath))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// 2. 如果123盘下载失败,使用阿里云OSS作为备用
|
||||
UpdateStatus("123盘下载失败,尝试阿里云OSS备用方案...");
|
||||
return await DownloadFileWithFallback(fileName, localPath);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
UpdateStatus($"所有下载方式都失败: {ex.Message}");
|
||||
Debug.WriteLine($"下载MD5文件异常: {ex}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从123盘下载在线MD5文件
|
||||
/// </summary>
|
||||
/// <param name="baseUrl">123盘基础链接地址</param>
|
||||
/// <param name="fileName">要下载的文件名</param>
|
||||
/// <param name="localPath">本地保存路径</param>
|
||||
/// <returns>下载是否成功</returns>
|
||||
private async Task<bool> DownloadFromOneDrive(string baseUrl, string fileName, string localPath)
|
||||
{
|
||||
try
|
||||
{
|
||||
UpdateStatus($"正在从123盘下载: {fileName}");
|
||||
|
||||
// 生成123盘鉴权URL
|
||||
string authUrl = GenerateAuthUrl(baseUrl, fileName);
|
||||
|
||||
UpdateStatus($"使用鉴权URL下载文件...");
|
||||
|
||||
// 创建HTTP请求
|
||||
var request = new HttpRequestMessage(HttpMethod.Get, authUrl);
|
||||
request.Headers.Add("User-Agent", "CheckDownload/1.0");
|
||||
|
||||
// 发送请求并获取响应
|
||||
var response = await _httpClient.SendAsync(request);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
// 读取文件数据
|
||||
byte[] fileData = await response.Content.ReadAsByteArrayAsync();
|
||||
|
||||
// 确保本地目录存在
|
||||
string localDir = Path.GetDirectoryName(localPath);
|
||||
if (!Directory.Exists(localDir))
|
||||
{
|
||||
Directory.CreateDirectory(localDir);
|
||||
}
|
||||
|
||||
// 保存文件到本地
|
||||
File.WriteAllBytes(localPath, fileData);
|
||||
|
||||
UpdateStatus($"123盘下载成功: {fileName}");
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
UpdateStatus($"123盘下载失败: {fileName} - {ex.Message}");
|
||||
Debug.WriteLine($"123盘下载异常: {ex}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user