我正在构建一个原始的和基本的Web浏览器,我的工作场所希望在该浏览器上托管一些内部应用程序。我在用C#编写的WinForms应用程序中使用cefSharp
。我已经成功构建了浏览器来导航该应用程序,但是下载处理程序遇到了麻烦。我想直接将文件下载到C:\Users\[username]\Downloads
文件夹(全部我们的计算机是Windows计算机),而不必使用该对话框。
从Force CEFSharp to download without showing dialog读取内容表明,使用showDialog: false
应该可以,但是当我应用此功能时,没有任何下载。同样,通过研究以下任何方面,我也没有取得任何进展:
另外,可以选择打开文件(例如在Google Chrome中)是一件很高兴的事,但这并不是绝对必要的。
下面的代码运行流畅,近似于我的尝试。本示例将打开GitHub Gist。单击右侧的“下载邮政编码”按钮,将打开对话框以下载并保存文件。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;
using System.IO;
namespace ShinyChrome
{
public partial class ShinyApp : Form
{
public class DownloadHandler : IDownloadHandler
{
public event EventHandler<DownloadItem> OnBeforeDownloadFired;
public event EventHandler<DownloadItem> OnDownloadUpdatedFired;
public void OnBeforeDownload(IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback)
{
var handler = OnBeforeDownloadFired;
if (handler != null)
{
handler(this, downloadItem);
}
if (!callback.IsDisposed)
{
using (callback)
{
callback.Continue(downloadItem.SuggestedFileName, showDialog: true);
}
}
}
public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback)
{
var handler = OnDownloadUpdatedFired;
if (handler != null)
{
handler(this, downloadItem);
}
}
}
public ShinyApp()
{
InitializeComponent();
}
ChromiumWebBrowser chrome;
private void ShinyApp_Load(object sender, EventArgs e)
{
CefSettings settings = new CefSettings();
Cef.Initialize(settings);
chrome = new ChromiumWebBrowser("https://gist.github.com/nutterb/32992747c1a69aa7a8fdcc2b5347178f");
chrome.DownloadHandler = new DownloadHandler();
this.shinyContainer.Controls.Add(chrome);
}
}
}
最佳答案
根据TEK的建议,我用下面的代码替换了问题中的if(!callback.IsDisposed)
块。
if (!callback.IsDisposed)
{
using (callback)
{
callback.Continue(@"C:\Users\" +
System.Security.Principal.WindowsIdentity.GetCurrent().Name. +
@"\Downloads\" +
downloadItem.SuggestedFileName,
showDialog: false);
}
}
关于c# - 将Cefsharp中的文件下载到目录中,以允许用户打开,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42820755/