我正在构建一个原始的和基本的Web浏览器,我的工作场所希望在该浏览器上托管一些内部应用程序。我在用C#编写的WinForms应用程序中使用cefSharp。我已经成功构建了浏览器来导航该应用程序,但是下载处理程序遇到了麻烦。我想直接将文件下载到C:\Users\[username]\Downloads文件夹(全部我们的计算机是Windows计算机),而不必使用该对话框。

Force CEFSharp to download without showing dialog读取内容表明,使用showDialog: false应该可以,但是当我应用此功能时,没有任何下载。同样,通过研究以下任何方面,我也没有取得任何进展:

  • WPF : download files through CefSharp
  • https://github.com/cefsharp/CefSharp/blob/cd934267c65f494ceb9ee75995cd2a1ca0954543/CefSharp.Example/DownloadHandler.cs
  • WPF : download files through CefSharp
  • https://groups.google.com/forum/?nomobile=true#!topic/cefsharp/bS8PhHRlSAc
  • https://groups.google.com/forum/#!topic/cefsharp/3cMUHSGxPDc

  • 另外,可以选择打开文件(例如在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/

    10-12 06:33