可以使用123盘正常更新

This commit is contained in:
2025-06-22 22:26:45 +08:00
parent 0595b46862
commit ce36eadae2

149
Form1.cs
View File

@@ -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;
}
}
}
}