首页 新闻 会员 周边

WPF WebView2 如何控制在网页下载文件的默认保存路劲

0
悬赏园豆:20 [已解决问题] 解决于 2023-06-08 13:49

WPF WebView2 打开网页后
如何控制在网页下载文件的默认保存路劲

暖心之阳的主页 暖心之阳 | 初学一级 | 园豆:184
提问于:2023-04-28 15:22

这个不算要设置浏览器的下载默认路径吗

码上有钱(why) 1年前

@码上有钱(why): 不行的,试过了,本机EDG浏览器设置了默认地址,没生效

暖心之阳 1年前
< >
分享
最佳答案
1

// 可以通过WebView2的CoreWebView2对象的DownloadStarting事件来控制下载文件的默认保存路径
// 下载文件的默认保存路径可以通过CoreWebView2的BrowserExecutableFolder属性来获取
// 下载文件的保存路径可以通过CoreWebView2的DownloadFolder属性来设置
using Microsoft.Web.WebView2.Core;
using System.IO;

public class WebView2DownloadHandler
{
private CoreWebView2 _coreWebView2;

public WebView2DownloadHandler(CoreWebView2 coreWebView2)
{
    _coreWebView2 = coreWebView2;
    _coreWebView2.DownloadStarting += CoreWebView2_DownloadStarting;
}

private void CoreWebView2_DownloadStarting(object sender, CoreWebView2DownloadStartingEventArgs e)
{
    // 设置下载文件的保存路径为浏览器所在目录
    string downloadFolder = Path.GetDirectoryName(_coreWebView2.BrowserExecutableFolder);
    _coreWebView2.DownloadFolder = downloadFolder;
}

public void Dispose()
{
    _coreWebView2.DownloadStarting -= CoreWebView2_DownloadStarting;
}

}

收获园豆:20
lanedm | 老鸟四级 |园豆:2378 | 2023-05-13 11:36

这个是对的

Adming | 园豆:119 (初学一级) | 2023-05-15 11:51

@Adming:
大佬,没有这个事件呀,是我的版本太低吗还是什么

暖心之阳 | 园豆:184 (初学一级) | 2023-05-15 15:20

@暖心之阳: 可能是新版本禁用了吧,帮你问了一下ChatGPT。

WebView2 不提供直接设置下载文件的默认保存路径的方法。但是,可以通过以下步骤实现:

1、在 WebView2 中注册 CoreWebView2DownloadStartingEventHandler 事件处理程序。

2、在事件处理程序中获取下载文件的信息,包括文件名和下载链接。

3、使用 System.Windows.Forms.SaveFileDialog 对话框或其他方法,让用户选择保存文件的路径和文件名。

4、使用 System.Net.WebClient 或其他方法,下载文件并保存到用户选择的路径中。

以下是一个示例代码片段:

private async void webView_CoreWebView2DownloadStarting(object sender, CoreWebView2DownloadStartingEventArgs e)
{
    // 获取下载文件的信息
    string fileName = e.SuggestedFileName;
    string downloadUrl = e.Uri;

    // 弹出保存文件对话框,让用户选择保存路径和文件名
    SaveFileDialog saveFileDialog = new SaveFileDialog();
    saveFileDialog.FileName = fileName;
    if (saveFileDialog.ShowDialog() == DialogResult.OK)
    {
        string savePath = saveFileDialog.FileName;

        // 下载文件并保存到用户选择的路径中
        using (WebClient webClient = new WebClient())
        {
            await webClient.DownloadFileTaskAsync(downloadUrl, savePath);
        }
    }
}
Adming | 园豆:119 (初学一级) | 2023-05-16 10:01

@Adming: 谢谢大佬,今天试了下可行

暖心之阳 | 园豆:184 (初学一级) | 2023-06-08 13:42

@Adming: 这种情况没有拦截原有下载,相当于下载了两次是什么原因?

HALDW | 园豆:200 (初学一级) | 2024-04-12 14:18

@HALDW: 在注册CoreWebView2DownloadStartingEventHandler 事件前,先试着把以前注册的处理方法清除看看。

LDMING | 园豆:194 (初学一级) | 2024-04-12 14:22
其他回答(1)
0

在注册CoreWebView2DownloadStartingEventHandler 事件前,先试着把以前注册的处理方法清除看看。

LDMING | 园豆:194 (初学一级) | 2024-04-12 14:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册