Perl从url下载到本地驱动器

时间:2013-05-16 02:06:41

标签: perl file download

我想向访问者提供一个文件,以便下载到他们的本地计算机(例如Windows7下载目录)。 下面的代码非常有效,但前提是该文件与脚本位于同一台机器上:

#!/usr/bin/perl

my $path = "samples/10000.mp3"; ##PATH_TO_FILE
my $file = "10000.mp3";

print "Content-Type:application/octet-stream; name=\"$file\"\r\n";
print "Content-Disposition: attachment; filename=\"$file\"\r\n\n";

open( FILE, $path );

while(read(FILE, $buffer, 100) ){
print("$buffer");
}

问题是有问题的文件位于另一台机器上,因此我必须获取下载的URL。我认为下面的编码可以解决问题,但无论我尝试什么,我最终得到一个0字节的下载文件。有人可以告诉我我做错了吗?

#!/usr/bin/perl

use LWP::Simple;
my $url = 'http://<sampleurl>.com';
my $file = '10000.mp3';

my $path = get($url);

print "Content-Type:application/octet-stream; name=\"$file\"\r\n";
print "Content-Disposition: attachment; filename=\"$file\"\r\n\n";

open my $fh, '+>', $path;
while(read($fh, $buffer, 100) ){
print("$buffer");
}

1 个答案:

答案 0 :(得分:2)

get method in LWP::Simple返回内容,而不是包含内容的文件的路径。

获得内容位后,将它们与标题一起写入标准输出。将您的第二个程序更改为

#! /usr/bin/perl

use LWP::Simple;

my $url = 'http://<sampleurl>.com';
my $file = '10000.mp3';

my $bits = get($url);
die "$0: get $url failed" unless defined $bits;

binmode STDOUT or die "$0: binmode: $!";

print qq[Content-Type:application/octet-stream; name="$file"\r\n],
      qq[Content-Disposition: attachment; filename="$file"\r\n],
      qq[\r\n],
      $bits;