Как получить тип содержимого загруженного файла с помощью CGI::Application?

Я пытаюсь обработать загруженный файл в программе Perl, используя CGI::Application. Мне нужно получить тип содержимого загруженного файла. Из того, что я прочитал, следующее должно работать, но это не для меня:

my $filename = $q->param("file");
my $contenttype = $q->uploadInfo($filename)->{'Content-Type'};

Оказывается, $q->uploadInfo($filename) возвращает undef. Как и $q->uploadInfo("file").

Есть идеи?

Спасибо!


person pkaeding    schedule 16.12.2008    source источник


Ответы (2)


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

chomp(my $mime_type = qx!file -i $uploaded!);
$mime_type =~ s/^.*?: //;
$mime_type =~ s/;.*//;

хотя вместо этого вы можете использовать File::Type, File::MMagic или File::MimeInfo.

person ysth    schedule 16.12.2008

Вы проверяете что-нибудь, что могло пойти не так?

Я получил этот точный код, который отлично работает, но, глядя на него, он завернут в тест на $filename, являющийся undef, а также на что-либо в $cgi->cgi_error(). Мои воспоминания немного смутны, но, должно быть, на это была причина...

person AmbroseChapel    schedule 16.12.2008
comment
Я знаю, что $filename не является undef, так как я печатаю это в операторе журнала, прежде чем пытаться прочитать MIME-тип. Я не проверял cgi_error(), но попробую. В любом случае File::Type работал хорошо для меня, и мне нравится, что он не зависит от клиента для предоставления типа. - person pkaeding; 16.12.2008