Dlaczego mój skrypt do pobierania obrazów CGI napisany w Perlu nie działa?
<code>#!/usr/bin/perl use CGI ':standard'; use CGI::Carp qw(fatalsToBrowser); my $files_location; my $ID; my @fileholder; $files_location = "C:\Users\user\Documents\hello\icon.png"; open(DLFILE, "<$files_location") ; @fileholder = <DLFILE>; close (DLFILE) ; print "Content-Type:application/x-download\n"; print "Content-Disposition:attachment;filename=$ID\n\n"; print @fileholder; </code>
Kiedy uruchamiam ten skrypt, zamiast zwracaćicon.png
plik zwracadownload.pl
(nazwa skryptu podanego powyżej) za pomocąbrak zawartości w środku tego. Jaki jest problem?
Skrypt, którego obecnie używam.
<code>#!C:\Perl64\bin\perl.exe -w use CGI qw(:standard); use File::Copy qw( copy ); use File::Spec::Functions qw( catfile ); use constant IMG_DIR => catfile(qw( D:\ )); serve_logo(IMG_DIR); sub serve_logo { my ($dir) = @_; my $cgi = CGI->new; my $file = "icon.png"; #print $file; defined ($file) or die "Invalid image name in CGI request\n"; send_file($cgi, $dir, $file); return; } sub send_file { my ($cgi, $dir, $file) = @_; my $path = catfile($dir, $file); open my $fh, '<:raw', $path or die "Cannot open '$path': $!"; print $cgi->header( -type => 'application/octet-stream', -attachment => $file, ); binmode STDOUT, ':raw'; copy $fh => \*STDOUT, 8_192; close $fh or die "Cannot close '$path': $!"; return; } </code>