需要一些可以从服务器上下载文件的cgi-perl脚本。 EX:点击下载链接,它将打开“另存为” 窗口,将允许我将文件保存在我的本地计算机上。
我使用CGI创建了一个网页,使用这个我将上传文件到服务器并运行perl脚本将其转换为其他格式(直到这里我完成了)。现在我需要将此文件恢复(下载回)到系统。
#!/usr/bin/perl
#print "Content-type: text/html\n\n";
my $filepath='/upload/testing.pm';
print "Content-Type: text/html\n\n";
open("DOWNLOADFILE", "<".$filePath);
while($fileContents = <DOWNLOADFILE>) {
print $fileContents;
}
print "Content-Type: text\n";
print "Content-Disposition: attachment; filename='testing.pm'\n";
print "Content-Description: File to download\n\n";
close DOWNLOADFILE;
将文件从我的机器(客户端)上传到服务器机器,在那里我有一个perl脚本,它将文件转换为另一种格式,并将新转换的文件保存到dir ex:/ upload-&gt;直到这里我完成了脚本编写。
现在我需要使用浏览器将此文件下载回客户端计算机。在这种情况下,我试图将testing.pm文件下载回客户端计算机。
答案 0 :(得分:5)
重新排列HTML标头有效。 这是工作脚本。可以使用它,因为它是
use CGI;
my $html= new CGI;
#get the file name from URL ex. http://<server_IP>/cgi-bin/download.cgi?a=testing.txt
my $file= $html->param('a');
# $file is nothing but testing.txt
my $filepath= "/var/www/upload/$file";
print ("Content-Type:application/x-download\n");
print "Content-Disposition: attachment; filename=$file\n\n";
open FILE, "< $filepath" or die "can't open : $!";
binmode FILE;
local $/ = \10240;
while (<FILE>){
print $_;
}
close FILE;
# use Unlink if u want to delete the files after download.
#unlink ($filepath);
答案 1 :(得分:4)
我认为您刚刚拼写了内容处置标头错误。它应该是“依恋”,而不是“附带”。
更新(以下评论):
好的,所以进一步看,我看到你正在打印一个CGI标题(Content-Type:text / html),然后是两个换行符,然后打印更多的CGI标题,并期望浏览器注意到它们。响应中的第一个空白行将告诉浏览器标题已完成。因此,您的第二批标题将被视为内容。
我还看到你在第二组标题之前打印文件的内容。这将使他们成为页脚而不是标题: - )
您需要重新排序代码,以便只返回一组标题。然后你返回数据。