描述:
我的程序是嵌入网页的一个OCX,程序有一个功能是将当前网页所在服务器上的某项资源下载到本地临时文件并打开。这样我需要的下载例程需要实现这样的功能:
1.能够通过一个相对路径定位服务器上资源,即不一定需要提供完整的URL,比如这样的路径"/setup.exe"也能被接受。
2.自动辨别服务器资源的MIME类别并选择合适的本地临时文件扩展名,比如我传入一个下载路径为/content.asp,下载完成后本地临时文件的扩展名应该为.htm,这样我才可能通过ShellExecute直接打开这个文件。
3.在下载过程中应该有适当的进度提示,并可被用户取消。
我发现只要将当前控件的IUnknown接口作为一个参数来调用URLDownloadToCacheFile函数,1、2 两个功能都可以完美的实现,而通过IBindStatusCallback回调我也可以获取下载进度信息及取消下载。
唯一的致命问题是URLDownloadToCacheFile会等待下载过程结束后返回,这样由于界面线程被阻塞,IE窗口在下载过程中总是处于“没有响应”状态。
我想到过如果新开一个工作线程中并在其中调用URLDownloadToCacheFile或许能够解决问题,作了尝试以后发现在新线程中URLDownloadToCacheFile的表现非常不同:一是再也无法识别相对路径,二是似乎无法通过MIME类别判断资源内容了——在碰到这样的URL http://xx/t.asp?xxxxx=xx 就会出错
我如何才能解决我的问题?
解决方案1:
1.如果服务器禁止目录浏览就不可能实现,一般http的都不允许这样的
看了看后面的要求,这个函数有一个callback可以实现进度显示,一般作下载用这个能行吗?你的任务不是特别大还是用CInternetSession类的算了
帮你up