下载后文件为空

File is empty after downloading

我正在尝试从服务器下载 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');

}

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

  • 您使用的是什么操作系统?
  • 您使用的是什么网络服务器?
  • 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 "@_";
}

但是 none 我的编辑改变了您代码的基本工作方式。我假设我的版本会像你原来的那样失败。