Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > оределить тип рисунка


Автор: ежик 15.11.2005, 09:00
необходимо загрузить файлы на сервер определенного типа (рисунки: BMP JEPG PNG GIF)
определение типа файла по расширению даже не расматривались.
может у когонить есть какието соображения


Автор: arto 15.11.2005, 09:56
perldoc Image::Info

Автор: ежик 16.11.2005, 01:59
вот код который я использую
но ка только я начинаю использовать 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
        }

    }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)