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 DownloadCompleteEvent; public Action 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"; } } }