【问题标题】:How to handle downloads with GTK WebKit?如何使用 GTK WebKit 处理下载?
【发布时间】:2013-10-17 12:28:30
【问题描述】:

我遇到了一个问题,我将尝试清楚地解释。我在一种嵌入式应用程序中使用 gtkmm webkit 浏览器 来访问 php/html 文件。关键是我没有为这个 webkit 编写处理下载的方法

哦,我正在用 C++ 编写代码。

当前要下载的文件在我的 HTML 代码中如下所示:

<a href='excel/template_users.php'><img src='imgs/excelbis.png'/>Download Excel File</a>

“template_users.php”文件只是强制用户下载文件的一种方式(您也可以通过“经典”网络浏览器访问该网站)。它只包含:

<?php
    header("Content-disposition: attachment; filename=template_users.xls");
    header("Content-type: application/vnd.ms-excel:");
    readfile("template_users.xls");
?> 

我一直在尝试通过向我的 IntegratedBrowser 类构造函数(它实例化 webkit)添加一个连接到信号“下载请求”的连接器来处理下载:

gboolean ret = FALSE;
g_signal_connect(webView, "download-requested", G_CALLBACK(&IntegratedBrowser::downloadRequested), &ret);

以及相关的方法:

gboolean IntegratedBrowser::downloadRequested(WebKitWebView* webView, WebKitDownload *download, gboolean *handled)
{
    const gchar* dest = webkit_download_get_uri(download);
    webkit_download_set_destination_uri(download, dest);
   return FALSE;
}

我应该准确地说,当我尝试通过“经典网络浏览器”下载文件时,一切运行正常。 c++ 代码编译顺利,但是,当我使用 webkit 单击链接时没有任何反应。单击链接时,如果可能,我希望将文件下载到用户选择的位置(也可以将文件下载到特定位置)。

你知道我做错了什么吗?

感谢您的回答!

编辑:现在我的 downloadRequested 方法看起来像这样:

gboolean IntegratedBrowser::downloadRequested(WebKitWebView* webView, WebKitDownload *download, gboolean *handled)
{
    const gchar* dest = g_strdup_printf("%s", "file:///home/user/test.xls");
    webkit_download_set_destination_uri(download, dest);
    return TRUE;
}

【问题讨论】:

    标签: c++ webkit gtkmm


    【解决方案1】:

    IntegratedBrowser::downloadRequested() 方法中的 return FALSE 会取消下载。 return TRUE 应该启动它。

    此外,您将使用webkit_download_get_uri()(例如http://my.website.com/myfile.jpeg)获取要下载的 URI,并将其设置为目标 URI。将目标 URI 设置为指向本地文件(尽管未设置它可能会将文件下载到默认位置。)

    如果您想要一个文件选择器来选择保存下载的位置,请使用 GtkFileChooser,完成后,使用 gtk_file_chooser_get_uri() 检索 URI。

    【讨论】:

    • 感谢 ptomato 的回答。不幸的是,我之前确实尝试过(但由于您建议,我又给了它一个)并且什么也没发生。 webkit_download_get_uri 命令是否应该弹出一个询问文件下载位置的弹窗?
    • 不,请确保read the documentation 了解它的作用。我已经更新了我的答案。
    • 感谢您的回答。至少现在我的头脑更清楚了!不幸的是,基于您的建议的代码(在我的问题末尾编辑)仍然不起作用。我唯一的线索是,鉴于下载请求信号的documentation,由于我尝试下载的(excel)文件的 MIME 类型,没有发出信号。会这样吗?
    • 我想我现在“只是”调查一下 :) 再次感谢您提供宝贵的答案!
    猜你喜欢
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多