我遇到了一个问题,我会尝试解释清楚。我在一种嵌入式应用程序中使用 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;
}
答案 0 :(得分:0)
return FALSE
方法中的IntegratedBrowser::downloadRequested()
取消下载。 return TRUE
应该启动它。
此外,您正在使用webkit_download_get_uri()
(例如http://my.website.com/myfile.jpeg
)获取要下载的URI,并将其设置为目标URI。将目标URI设置为指向本地文件(尽管不设置它可能会将文件下载到默认位置。)
如果您想要一个文件选择器来选择保存下载的位置,请使用GtkFileChooser
,完成后,使用gtk_file_chooser_get_uri()
检索URI。