下载模块,能否增加一些信息的输出或自动验证大小?

功能建议 · 5120 次浏览
iamadsl 创建于 2024-12-28 14:22

原始大小,就是下载时进度条上那个总大小

下载ZIP的时候,偶尔会有下载后打不开的问题,重新下载就没事,这个问题不太大

更多的情况是,下一些几十M的图片时,服务器不稳定,经常下载后图片损坏,图片大小与原始大小有明显区别,所以想通过对比大小验证是否下载成功,失败的话直接可以重新下载,免得每次都得手动查看验证

要是下载模块能自动验证这些就更好了


回复内容
CL 2024-12-28 21:41
#1

如果服务端返回了etag信息,这个信息通常表示文件的md5,会自动做校验的。

其它情况没法判断。

iamadsl 回复 CL 2024-12-29 01:20 :

很多文件尤其是图片没有etag信息。

那就不需要判断了,增加一个输出原始大小信息行不?剩下的我自己对比验证,解决一个是一个,总比什么都不解决强

CL 回复 iamadsl 2024-12-29 10:03 :

需要服务器返回总长度才行。 要不给我几个文件网址,我这里测试看看。

iamadsl 回复 CL 2024-12-29 11:05 :


这里就有总长度啊5.06M,下载完能输出这个信息就行了。要有其他相关信息,也尽量都给个输出,我看着用。另外最好能增加个自动重试n次的功能,拜托了!

 https://images.unsplash.com/photo-1733370111606-14847979fae5?ixlib=rb-4.0.3&q=85&fm=jpg&crop=entropy&cs=srgb&dl=austin-ramsey-AhM0yBuW1_I-unsplash.jpg

CL 回复 iamadsl 2024-12-29 21:32 :

查了下代码,如果下载的文件大小和预期大小不一样,应该会报错失败的。所以,我还不是很确定你究竟遇到了什么问题。

检查一下步骤里是不是忽略了报错?

iamadsl 回复 CL 2024-12-29 22:47 :

看了一眼,确实忽略了报错。具体就是有时候图片下载完成了,但是是破损的,文件大小比原图小,打开只能显示出一部分

我现在的情况是,感觉下载模块不太稳定,所以第一次用QK下载失败以后,会自动转给wget重新下载,因为经常同时下载好多个图,也有可能是把wget下载的文件当成QK下载的了,可能wget缺少验证,我还没搞清wget控制台的信息,回头我只用下载模块试一下,麻烦了!

今天网络有点好,一直没几个下载失败的,回头我再观察观察

iamadsl 回复 CL 2024-12-29 23:37 :

第一张是干脆打不开的,第二张是我P的,大概这么个效果,就是没下载完整,只显示一部分

CL 回复 iamadsl 2024-12-30 08:11 :

这里可以直接用quicker直接循环重试一下,直到下载成功。

iamadsl 回复 CL 2025-01-02 16:55 :

这两天又试了一下,网络不稳的情况下,还是很容易出错。大概情况是,下载失败后自动重试,若干次以后可能会下载成功,但有一定机率下载后打不开,就是我之前截图的第一种情况。我观察过,第一次下载的时候,获取的大小是正常的,只是可能由于服务器响应之类的问题导致失败。重试下载时,获取的大小明显不对,虽然下载成功,但实际下载成功后打不开。

另外还有个问题,就是在循环重试的过程中,可能出现严重超出超时秒数的时间,仍不返回false的问题,一般第一次调用下载模块,印象中似乎没出过类似的问题,或者可能没有严重超出

循环几次以后,可能会一直卡在进度条上,有时候可能过几十秒能继续,有时候就一直卡下去了。下图里的进度条,是我手动调出的,而且这已经是我第2次运行99秒的循环了,第一次的截图被剪贴板覆盖了。。。估计这次就要一直卡下去了



iamadsl 回复 iamadsl 2025-01-02 16:57 :


iamadsl 最后更新于 2025-01-02 16:58
iamadsl 回复 CL 2025-01-02 16:57 :

还是希望下载模块无论下载成功或失败,都能输出大小信息,我可以以第一次输出的大小为准,验证重试并下载成功后的文件,可能不严谨,但至少是个验证办法,能解决一些问题

iamadsl 回复 CL 2025-01-02 16:59 :

那个etag我也试了,看不懂,返回一堆字母+数字的字符串,没看出任何有用的信息

iamadsl 回复 CL 2025-01-02 17:19 :

哦对,我设置的超时秒数是20

iamadsl 回复 CL 2025-01-02 18:05 :

顺便,下载模块和显示进度条模块,能不能让进度条不要置顶,最好可以最小化显示,现在长时间下载,经常挡住右下角的界面,影响操作

CL 回复 iamadsl 2025-01-02 19:49 :

超时是指的一段时间后没有收到任何数据,不是完整下载所有内容超过时间就算超时,因为不知道文件多大,要下载多久的。

我觉得首先需要搞清楚到底是哪里出的问题,先不要用别的工具下载,或下载的时候用不同的文件名。 然后看看有没有真的返回成功,但实际下载有问题的。 因为程序里是根据大小判断,如果下载的字节数不够,不会是成功的。 

建议这样,在动作里,每次重试下载的时候,都在文件名后面增加后缀1234....,然后调试方式运行,把所有下载结果文件和调试文件一起打包分享一下网盘,我再分析分析看看。

iamadsl 回复 CL 2025-01-02 19:59 :

嗯嗯,我知道超时的意思,你看我的截图,已经将近2个99秒循环都没有接收过数据了。确认下载数据一直没变化,然后进度条就一直卡着,超时了也不false。下载报错有时候是文件在占用,会不会这个原因?这种情况我没特别关注过,看到过几次,没专门测试和卡进度条有没有关系

其他的我按你的方法试一下,有结果我再传~

iamadsl 回复 CL 2025-01-02 20:00 :

你看这俩下载,是我正在下载的任务,从显示进度条开始,就一直这样,卡了有几分钟了

CL 回复 iamadsl 2025-01-02 20:26 :
文件占用,是不是多个下载任务有重名了?或者文件被别的程序打开之类的情况。 超时这个可能有问题,不过目前没有太烂的网络进行测试😂
iamadsl 回复 CL 2025-01-03 00:31 :

这个要延伸出来,还有点复杂,大概是这样:如果下载模块会卡住了,我会执行以下两种操作:

1. 点进度条右上角那个清除(是垃圾桶,不是X号),下载进度条消失,但调用下载模块的这个动作可能还在运行,托盘的菜单里能看到。

2. 通过停止运行中的动作(包含下载模块的动作没有被忽略),报的提示说停止了XX个动作,但有很大概率:下载进度条还在,托盘菜单还能看到动作。以我的经验,如果我判断这个进度条卡了,那停止运行中的动作,就没法消除进度条。正常情况下进度条会消失,我试过

所以,无论哪种操作,都有概率需要通过托盘菜单手动结束。第1种操作几乎必须手动结束,第2种操作看概率。而且手动结束以后,托盘菜单里确实不显示了,但可能过了几十秒才弹出黄色的提示框,说明已中止XX动作。

另外,如果是点X按钮,有时候可以取消对应的下载,但有时候也出现无效的情况,点了X也不会关闭下载,怀疑这时候已经卡住了(是卡下载还是卡动作,就搞不清了)

另另外,我还验证过,在QK下载不下来,进度一直不更新的情况下,在网站上直接点开大图,是能基本顺利打开的,有时候网不好,可能慢点,但一般一二次都能顺利刷新出来,所以下载模块会卡住,应该和网站没啥关系


重名的问题,我运行动作下载的时候几乎不会重复下载,就算偶尔有重复下载的,也肯定是完全取消现有的下载之后,再运行动作下载。我设置了重试下载5次,但肯定是在下载模块输出false的情况下才会重试,而正常情况下,下载模块失败后会自己清理扩展名带DOWLOADXXXXX的临时文件吧


所以我怀疑是不是超时卡进度条和下载的文件被占用,实际上都是卡动作的原因?


PS:

目前下载的图片打不开但返回true的问题,我通过读取图片模块进行验证,算是解决了。所以现在最烦的就是卡下载进度这个了————这个问题最关键是,卡住之后,我就没法让它失败,只有它返回失败了,我才能用后续的步骤溯源,调出下载链接或者下载页,如果直接强制结束,我就再也不知道下载的是哪张了,只能参考历史记录和已经下载的图,核对哪个没下载下来,特别费时间。

另外,图片下载完只显示一部分的问题,是wget中断导致的,与QK无关。本来想用wget取代下载模块的,基本功能实现了,但有些控制台数据和意外中断的情况,实在搞不定,还得指望下载模块,所以有空的话尽量帮我看看到底什么原因,能解决就最好!谢谢~

iamadsl 最后更新于 2025-01-03 00:33
iamadsl 回复 CL 2025-01-03 00:39 :

对了,卡进度条的时候,也不是就一直卡着,比如好的时候,设置20秒超时,可能三五十秒后还能返回false,但也可能好几分钟或者就一直卡,忍不了的时候就只能强制结束

CL 回复 iamadsl 2025-01-03 07:50 :

由于需要在本地复现这些问题才能调试,目前不好弄条件。 建议考虑用第三方下载工具,有些支持命令行传递参数的,可以得到链接后,调用下载工具下载,应该会更理想些。

IDM命令行下载

CL 最后更新于 2025-01-03 07:51
iamadsl 回复 CL 2025-01-03 08:52 :

好的谢谢,我研究一下

回复主贴