从1天开始,我就被震惊了。 首先是取所有文件名。然后上传并收集所有文件句柄。 由于某种原因,文件无法正确上传到/ home / img文件夹。 如果上传,它们就会被破坏。损坏的文件大小显示为0字节或24字节。
请提供上传部分的帮助。
#!/usr/bin/perlml -Tw
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
my $cgi = CGI->new;
my $upload_dir = "/home/img";
my @raw_filenames = $cgi->param('photos');
my $filename_characters = 'a-zA-Z0-9_.-';
my $ext = "";
my $raw_filenames = "";
my $raw_fh = "";
my $single_filename = "";
my $single_io_handle = "";
my @all_io_handle = "";
my @all_filenames = "";
print "Content-type: text/html\n\n";
#Getting the filenames ready
foreach $raw_filenames (@raw_filenames) {
( $single_filename, undef, $ext ) = fileparse( $raw_filenames, qr{\..*} );
push( @all_filenames, "$single_filename" );
}
#This prints the ready list of filenames
print "@all_filenames\n <br>";
#Getting the filehandles ready
my @raw_fh = $cgi->upload('photos');
foreach $raw_fh (@raw_fh) {
$single_io_handle = $raw_fh->handle;
push( @all_io_handle, "$single_io_handle" );
}
#This prints the ready list of filehandles
print "@all_io_handle\n <br>";
答案 0 :(得分:0)
CGI->upload
的以下测试适用于html input multiple属性。
我尝试通过临时文件和从磁盘读取文件来查看每个上传文件的文件大小:
#!/usr/bin/env perl
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
my $q = CGI->new();
my $msg = '';
if ( $q->request_method() eq 'POST' ) {
$msg .= '<table border=1 cellpadding=3 cellspacing=0><tr><th>File name</th><th>Temp size</th><th>Slurped size</th></tr>';
for my $file ( $q->upload('myfile') ) {
my $tempsize = -s $q->tmpFileName($file);
my $readsize = do {
my $fh = $file->handle();
binmode $fh;
local $/; # Slurp entire file
length <$fh>;
};
$msg .= '<tr><td>' . $q->escapeHTML($file) . "</td><td>$tempsize</td><td>$readsize</td></tr>";
}
$msg .= '</table>';
}
print $q->header;
print <<"END_HTML";
<html>
<head>
<title>Upload form using CGI</title>
</head>
<body>
<h1>Upload form using CGI</h1>
$msg
@{[ $q->start_form() ]}
<p><input type="file" name="myfile" accept="image/gif,image/jpeg,image/png" multiple required /></p>
<p><input type="submit" value="Upload"></p>
@{[ $q->end_form() ]}
</body>
</html>
END_HTML
发布前:
发布3张图片后:
您可能很简单地拥有CGI
的过时版本。检查版本
$ perl -MCGI -E 'say $CGI::VERSION'
4.04