вот код который я использую но ка только я начинаю использовать Image::Info то файлы записываются некоректно может ктонить подскажет код определения типа рисунка и сохранения его на сервере
| Код | #!/usr/perl/bin/perl -w
print "Content-type: text/html\n\n";
use strict; use warnings; use CGI qw/:standard/; use File::Spec(); use CGI::Upload(); use Image::Info qw(image_info);
foreach my $TEMP (upload('files')) { my $err='0'; my $types = uploadInfo($TEMP)->{'Content-Type'}; my $info = image_info($TEMP); if ($types eq 'image/gif') {} elsif ($types eq 'image/bmp') {} elsif ($types eq 'image/jpeg') {} elsif ($types eq 'image/x-png') {} else {$err='1';} print $types."<BR>\n"; print $info->{file_media_type}."<BR>\n"; if ($err eq '0') { ( my $name = $TEMP ) =~ s#.*[\]:\\/]##; $name =~ tr/ /_/ unless $^O eq 'MSWin32'; $name =~ tr/-+@a-zA-Z0-9. /_/cs; ($name) = $name =~ /^([-+@\w. ]+)$/; my $path = File::Spec->catfile( "/", $name ); my $i = 2; while (1) { last unless -e $path; $name =~ s/([^.]+?)(?:_\d+)?(\.|$)/$1_$i$2/; $path = File::Spec->catfile( "/", $name ); $i++; } open my $OUT, '>', $path or die "Couldn't open file: $!"; binmode $OUT, ':raw'; while ( read $TEMP, my $buffer, 1024 ) { print $OUT $buffer; } close $TEMP or die $!; # so the temporary file gets deleted close $OUT or die $!; # so file size can be grabbed below }
}
| |