下载后文件为空
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 我的编辑改变了您代码的基本工作方式。我假设我的版本会像你原来的那样失败。
我正在尝试从服务器下载 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 我的编辑改变了您代码的基本工作方式。我假设我的版本会像你原来的那样失败。