-
Notifications
You must be signed in to change notification settings - Fork 2.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
163邮箱文档类型的附件下载失败,不能添加Range #921
Comments
@congwiny 很赞,不过希望你能在 1.6.9 的版本上按照你的思路尽快提交一个 pull request ,到时候我们再详细 review ,ok 的话我们可以合入即将发布的 1.7.0 版本里。 |
@rantianhua 已经提交pull request啦 #925 |
@congwiny 感谢你的PR,我Review了代码,但是这样修改将会引发其他正常任务出现新的BUG问题,原因如下:
还是感谢你的PR,综上原因这个PR目前不会进行合入。 其实这个问题之前也有朋友提过,当时我已经给出现有版本的解决方案: #911 (comment) ,当时没有考虑修改库的原因,其实是目前不希望在FileDownloader中再引入新的Feature,我们需要将FileDownloader确定在一个稳定的版本,后续只做BUG FIX,而所有的新的Feature都将转移到更加稳定可靠、更加灵活的FileDownloader2- okdownload中进行处理。 但是还是多谢你的思考与Argue,给这个需求提供的一个相对可靠的思路。这边我们重新评估以后,预计通过以下方案来Cover这个问题: 首先根据你提供的信息,这个问题有一个很明显的特征,就是对于添加
这么以来,对其他任务不会有不良影响,唯一的影响是,如果某一个任务使用一个绝对有效的 |
非常感谢 @Jacksgong 专业细心的解答 ^_^ |
经过我一番测试和log输出,确定原因是163邮箱不支持多线程断点下载,不能添加Range这个请求头。
我看了FileDownloader的源码:
1.执行下载任务时,会执行DownloadLauncherRunnable的run方法
上面这段代码是要和请求的资源建立第一次连接,看服务器是否支持206,如果支持就使用多线程断点下载。如果不支持就使用单线程下载文件。
在firstConnectionTask.connect();执行的是ConnectTask的connect方法。
由上而知每次下载请求都会添加Range。第一次请求下载资源时是可以加的,判断服务器支不支持断点下载。如果确定服务器不支持断点下载,就不需要添加Range了吧。
在下载163邮箱文档类型的附件时,第一次请求下载失败。之前我为FileDownloader下载失败重试3次,所以接下来的第二次,第三次都会执行到ConnectTask中的addRangeHeader方法。导致下载任务失败。
后来,我把addRangeHeader方法给注释掉了。下载就成功了。但这样肯定是不行的,因为有些服务器的资源是支持多线程断点下载的。所以要做到兼容嘛。
以下是我的兼容方法,能正常下载163邮箱文档类型的附件,也能多线程断点下载其他资源。
还请 @Jacksgong review下,看看我的方法可行吗?还有没有更好的解决办法。
思路是在下载失败,重试的时候搞事情:
在DownloadLaunchRunnable添加一个成员变量isRangeNotSatisfiable,默认为false,在DownloadLaunchRunnable的isRetry方法里,修改isRangeNotSatisfiable的值。也为ConnectionProfile这个类添加一个成员变量isRangeNotSatisfiable,这个变量的取值根据DownloadLaunchRunnable中的isRangeNotSatisfiable取值。(在DownloadLaunchRunnable里创建ConnectionProfile时传入isRangeNotSatisfiable)
然后修改ConnectTask的addRangeHeader方法。
以上就是我的修改点,如果有没考虑到的或者不规范的地方,还望指教哈~
还是希望得到更好的解决办法。
The text was updated successfully, but these errors were encountered: