下载后文件为空

时间:2019-07-03 10:10:05

标签: perl download cgi

我正在尝试从服务器下载csv文件。文件正在下载,但是为空。任何建议都非常欢迎。文件名为Maintenance_File.csv,位于/ home / netcool位置。

#!/usr/bin/perl

use CGI ':standard';
use CGI::Carp qw(fatalsToBrowser);

my $files_location;
my $ID;
my @fileholder;

$files_location = "/home/netcool";

#$ID = param('file');
$ID = "Maintenance_File.csv";
#print "Content-type: text/html\n\n";
#print "ID =$ID";

if ($ID eq '') {
  print "You must specify a file to download.";
} else {
  $fileloc="/home/netcool/" . $ID;
  open(DLFILE, "$fileloc") || Error('open', 'file');
  @fileholder = <DLFILE>;
  close (DLFILE) || Error ('close', 'file');
  #print "Files data = @fileholder";
  print "Content-Type:application/octet-stream;\n";
  print "Content-Disposition:attachment;filename=\"$ID\"\r\n\n";
  print @fileholder
  #open(DLFILE, "< $fileloc") || Error('open', 'file');
  #while(read(DLFILE, $buffer, 100) ) {
  #  print("$buffer");
  #}
  #close (DLFILE) || Error ('close', 'file');

}

1 个答案:

答案 0 :(得分:1)

您的代码有效。我不知道为什么它在您的环境中不起作用,但是它在我的系统中按预期工作。也许您可以分享有关运行环境的更多信息。

  • 您使用的是什么操作系统?
  • 您正在使用什么Web服务器?
  • 是否已将任何内容写入Web服务器错误日志?

您的代码使用了许多过时的构造。重写为更现代的Perl,如下所示:

#!/usr/bin/perl

use strict;
use warnings;

use CGI 'header';
use CGI::Carp qw(fatalsToBrowser);

my $files_location = "/home/netcool";

my $filename = 'Maintenance_File.csv';

if (!$filename) {
  die "You must specify a file to download";
  exit;
}

print header(
  -type => 'application/octet-stream',
  -content_disposition => "attachment;filename=$filename",
);

my $fileloc = "$files_location/$filename";
open my $fh, '<', $fileloc or Error('open', 'file', $!);
print while <$fh>;
close $fh or Error ('close', 'file' );

sub Error {
  die "@_";
}

但是我所有的编辑都没有改变代码的基本工作原理。我认为我的版本将以与原始版本相同的方式失败。