为什么用Perl的LWP下载我的图像会给我一个错误大小的文件?

Xet*_*ius 7 perl image lwp

我试图使用Perl从HTTP服务器获取图像.

我有该文件的完整URL,我正在尝试使用

my $data = LWP::Simple::get $params{URL};
my $filename = "image.jpg";
open (FH, ">$filename");
print FH $data;
close (FH);
Run Code Online (Sandbox Code Playgroud)

现在,从逻辑上讲,至少对我而言,这应该有效.但文件大小略有不同,我无法解决原因.

救命!

dav*_*420 14

您需要使用binmode正确将图像数据写入磁盘.

my $data = LWP::Simple::get $params{URL};
my $filename = "image.jpg";
open (FH, ">$filename");
binmode (FH);
print FH $data;
close (FH);
Run Code Online (Sandbox Code Playgroud)

否则它被解释为文本,并且换行符被释放.

  • 你不需要像这样挂着一个全局文件句柄.使用File :: Slurp的write_file或LWP :: Simple :: getstore. (2认同)

inn*_*naM 13

Dave是对的,您应该/必须将文件句柄设置为二进制模式.但你可以一气呵成地完成所有这些:

LWP::Simple::getstore( $params{URL}, 'image.jpg' );
Run Code Online (Sandbox Code Playgroud)