Files
KJD/TEMUKJD/Helper/CustomDownloadHandler.cs
2025-11-03 11:25:42 +08:00

95 lines
3.5 KiB
C#

using CefSharp;
using CefSharp.Handler;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TemuKJD.BaseForms;
namespace TemuKJD.Helper
{
public class CustomDownloadHandler : DownloadHandler
{
private string downloadPath;
public Action<object, DownloadItem> DownloadCompleteEvent;
public Action<object, DownloadItem> DownloadStartEvent;
public CustomDownloadHandler(string path = null)
{
// 设置默认下载路径为用户的下载文件夹
downloadPath = path ?? Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
"Downloads\\DoubaoImage");
// 确保下载目录存在
if (!Directory.Exists(downloadPath))
{
Directory.CreateDirectory(downloadPath);
}
}
protected override bool OnBeforeDownload(
IWebBrowser chromiumWebBrowser,
IBrowser browser,
DownloadItem downloadItem,
IBeforeDownloadCallback callback)
{
// 必须检查回调是否有效
if (!callback.IsDisposed)
{
// 设置下载路径和显示下载对话框
string downloadFileName = downloadItem.SuggestedFileName;
if (downloadFileName.Contains('.'))
downloadFileName = downloadFileName.Insert(downloadFileName.LastIndexOf('.'), DateTime.Now.ToString("yyMMddHHmmss"));
else
downloadFileName += DateTime.Now.ToString("yyMMddHHmmss");
var filePath = Path.Combine(downloadPath, downloadFileName);
using (callback)
{
// 是否显示下载文件夹
callback.Continue(filePath, showDialog: false);
}
DownloadStartEvent?.Invoke(chromiumWebBrowser, downloadItem);
}
return true;
}
protected override void OnDownloadUpdated(
IWebBrowser chromiumWebBrowser,
IBrowser browser,
DownloadItem downloadItem,
IDownloadItemCallback callback)
{
// 下载完成时触发
if (downloadItem.IsComplete)
{
//Console.WriteLine($"下载完成: {downloadItem.FullPath}");
// 可以在这里触发通知或其他后续操作
DownloadCompleteEvent?.Invoke(chromiumWebBrowser, downloadItem);
}
// 下载取消时触发
else if (downloadItem.IsCancelled)
{
//Console.WriteLine($"下载取消: {downloadItem.SuggestedFileName}");
}
// 正在下载中,更新进度
else if (downloadItem.IsInProgress)
{
//Console.WriteLine($"下载进度: {downloadItem.PercentComplete}% " +
// $"({FormatFileSize(downloadItem.ReceivedBytes)}/{FormatFileSize(downloadItem.TotalBytes)}) " +
// $"速度: {FormatFileSize(downloadItem.CurrentSpeed)}/s");
}
}
// 格式化文件大小显示
private string FormatFileSize(long bytes)
{
if (bytes < 1024) return $"{bytes} B";
if (bytes < 1048576) return $"{bytes / 1024:F1} KB";
return $"{bytes / 1048576:F1} MB";
}
}
}