2008-12-16 8 views
2

J'essaie de traiter un fichier téléchargé dans un programme Perl, en utilisant CGI :: Application. J'ai besoin d'obtenir le type de contenu du fichier téléchargé. D'après ce que je lis, ce qui suit devrait fonctionner, mais il ne fonctionne pas pour moi:Comment obtenez-vous le type de contenu d'un fichier téléchargé en utilisant CGI :: Application?

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

Il se trouve que, $q->uploadInfo($filename) retours undef. Il en est de même pour $q->uploadInfo("file").

Des idées?

Merci!

Répondre

5

Vous faites confiance à quel que soit le téléchargement pour vous donner un bon type de contenu? Je viens enregistrer le fichier téléchargé sur le disque et faire:

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

que vous pouvez utiliser File :: type, File :: mmagic, ou un fichier :: MimeInfo à la place.

1

Êtes-vous à la recherche de tout ce qui pourrait avoir mal tourné?

J'ai obtenu ce code exact pour fonctionner très bien, mais en le regardant, il est enveloppé dans un test pour $filename étant undef et aussi pour quoi que ce soit dans $cgi->cgi_error(). Mes souvenirs sont un peu sombres mais il doit y avoir une raison à cela ...

+0

Je sais que $ filename n'est pas undef, puisque j'imprime cela dans une instruction log avant d'essayer de lire le type mime. Je n'ai pas vérifié cgi_error(), mais je vais essayer ça. En tout cas, File :: Type a bien fonctionné pour moi, et j'aime le fait qu'il ne dépende pas du client pour fournir le type. – pkaeding

Questions connexes