VC-请问在IDownloadManager的Download事件里如何获取要下载的文件?

发布于 2017-02-18 00:57:07 字数 267 浏览 1401 评论 3

请问在IDownloadManager的Download事件里如何获取要下载的文件名?所有参数如下

Download(IMoniker *pmk,
IBindCtx *pbc,
DWORD dwBindVerb,
LONG grfBINDF,
BINDINFO *pBindInfo,
LPCOLESTR pszHeaders,
LPCOLESTR pszRedir,
UINT uiCP)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浮生未歇 2017-08-24 03:16:04

通过RegisterBindStatusCallback注册回调事件,通过IMoniker来获取

LPOLESTR pwszUrl = NULL;
pmk->GetDisplayName (pbc, NULL, &pwszUrl);

下面是完整的实现过程:
http://www.codeproject.com/KB/atl/vbmhwb.aspx

偏爱自由 2017-08-12 17:29:03

在http的header中,有一个Content-disposition,它是MIME 协议的扩展,指示 MIME 用户代理如何显示附加的文件,它的有效值范围在征求意见文档 (RFC) 1806 中讨论。当用户想把请求所得的内容存为一个文件的时候可以根据它的内容提供一个默认的文件名,例如:
Content-Disposition: attachment; attachment;filename=test.xls

因此,可以从Download的参数pszHeaders中找到Content-disposition来获得文件名称。

清晨说ぺ晚安 2017-07-08 20:57:48

 CBSCBFileDL* dler = new CBSCBFileDL;
IBindStatusCallback *pPrevBSCB = NULL;
HRESULT hr = RegisterBindStatusCallback(pbc, reinterpret_cast<IBindStatusCallback*>(dler), &pPrevBSCB, 0L);
if(SUCCEEDED(hr))
{
IStream *pstm;
ATLTRACE("bind before");
hr = pmk->BindToStorage(pbc, 0, IID_IStream, (void**)&pstm);
ATLTRACE("bind end:%x, %p", hr, pstm);
if (referer.IsEmpty())
referer = dler->m_referer.c_str();
cookie = dler->m_cookie.c_str();
}
else
{
delete dler;
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文