Файл пуст после загрузки - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь загрузить 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 Ответ

1 голос
/ 03 июля 2019

Ваш код работает.Я не знаю, почему это не работает в вашей среде, но работает, как и ожидалось, на моей.Возможно, вы могли бы поделиться дополнительной информацией о среде, в которой вы ее используете.

  • Какую операционную систему вы используете?
  • Какой веб-сервер вы используете?
  • Что-нибудь записывается в журнал ошибок веб-сервера?

В вашем коде используется несколько довольно устаревших конструкций.Переписанный на более современный 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 "@_";
}

Но ни одно из моих правок не меняет основную работу вашего кода.Я предполагаю, что моя версия потерпит неудачу так же, как и ваша оригинальная.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...