如何检查我是否在Perl中下载了整个文件?

时间:2010-04-28 12:45:37

标签: perl download filesize

文件大小的测试在这里有意义吗?我在下载时试图切断连接,但看起来从未达到尺寸测试。

#!/usr/bin/env perl
use warnings; 
use strict;
use 5.012;
use LWP::Simple;

my $url = 'http://www.kernel.org/pub/linux/kernel/v2.6/next/patch-v2.6.34-rc5-next-20100428.bz2';
my $file = 'next_kernel.bz';
my $file_size = '3462166';

my $response = getstore( $url, $file );
if ( is_success $response ) {
    if ( $file_size == -s $file ) {
        say "OK";
    }
    else {
        say "Not OK";
    }
}

3 个答案:

答案 0 :(得分:2)

如果您只是想练习测试代码,请输入错误的文件大小并断言您的下载不是“OK”。如果你想测试中止连接会发生什么,你需要一个更大的文件 - 一个2342字节的下载应该只需要几分之一秒。

答案 1 :(得分:1)

这很奇怪,我得到了和你一样的结果。我没有解决方案,但我在这里报告了一些黑客攻击你的问题。

发生的事情是保存的文件比预期的要大,并且没有连接中断。尝试使用bunzip2即使在将所得文件截断为所需大小后也会出错。

通过将LWP :: UserAgent与:content_file参数一起使用到get()方法,可以获得完全相同的结果。同样再次向$ ua对象添加response_data处理程序。

但是以下命令让我得到了很好的结果:

GET http://www.kernel.org/pub/linux/kernel/v2.6/next/patch-v2.6.34-rc5-next-20100428.bz2> next_kernel.bz

由于GET是基于LWP的lwp请求脚本,如果你愿意深入研究它,你可以通过检查它的代码来找到答案。

希望这会对你有所帮助。

答案 2 :(得分:0)

我认为它没有受到伤害,但我确信如果连接中止,is_success将不会返回true。