我想向访问者提供一个文件,以便下载到他们的本地计算机(例如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");
}
答案 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;