WinInet 可以在不重新开始的情况下恢复文件下载吗?

Posted

技术标签:

【中文标题】WinInet 可以在不重新开始的情况下恢复文件下载吗?【英文标题】:Can WinInet resume file downloads without starting over? 【发布时间】:2013-07-25 04:40:09 【问题描述】:

我使用InternetSetFilePointerInternetReadFile 的组合来支持可恢复下载。所以当我开始下载一个文件时,我会检查我们是否已经拥有它的一部分,并使用我们拥有的大小调用InternetSetFilePointer,然后我开始阅读。这行得通……但是,这是我的观察结果:

如果我已经下载了 90% 的文件,并且下载了 2 分钟,那么当我恢复时,第一次调用 InternetReadFile 大约需要 2 分钟返回!我只能得出结论,在幕后,它只是从头开始下载文件,把所有东西都扔掉,直到我给InternetSetFilePointer,然后它带着“下一个”数据返回。

所以问题是:

1) WinInet 是“模拟”InternetSetFilePointer,还是真的将该信息提供给服务器?

2) 有没有办法让 WinInet 真正跳到所需的搜索点,假设 HTTP 服务器支持这样做?

我正在下载的服务器是 Amazon S3 服务器,我 99.9% 肯定支持恢复。

【问题讨论】:

【参考方案1】:

在一些扩展搜索中终于找到了正确的方法,这里有一篇关于它的好文章的链接:

http://www.clevercomponents.com/articles/article015/resuming.asp

基本上,要进行正确的 HTTP 恢复,您需要使用“Range”HTTP 标头,以便服务器可以正确地为您的请求分配资源。

【讨论】:

以上是关于WinInet 可以在不重新开始的情况下恢复文件下载吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在不重新构建的情况下对 Maven 构建中的文件进行更改吗?

java.sql.SQLException: Io 异常: Broken pipe 如何在不重启的情况下恢复?

我可以在不重新运行迁移的情况下修复 Flyway 中的版本号吗?

在不使用 SSMS 的情况下恢复 SQL Server 上的 .bak 数据库文件? [数据夹]

是否可以在不重新部署的情况下更新 PhoneGap 应用程序中的 HTML/CSS/JS 文件?

如何在不退出远程服务器上的 R 的情况下恢复 X11 连接