95 lines
3.5 KiB
C#
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";
|
|
}
|
|
}
|
|
}
|