0

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

1 回答 1

2

getLWP::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;
于 2013-05-16T02:43:07.380 回答