hotti: wie ist das mit file::type beim upload

Beitrag lesen

hi,

ich kapier nicht wirklich was file::type macht. hilft mir das modul überhaupt (dann installier ich es) oder liest file::type nur infos, wenn die datei schon auf dem server liegt? oder gibts eine zauber.pm die meine probleme alle auf ein mal löst?

Verstehe das Upload. Der Browser sendet eine Multipart-Message per Post (enctype="multipart/form-data"). Diese 'Datei' wird serverseitig aus STDIN gelesen, wenn Du CGI.pm verwendest, macht das CGI.pm und übernimmt auch das parsen, was nicht ganz trivial ist.

Alle Dateien, die der Browser in <input type="file"> sendet, legt CGI.pm auf dem Server temporär ab und über das CGI-Objekt bekommst Du jeweils ein Dateihandle über das name-Attribut.

D.h., die Dateien sind bereits auf dem Server.

Beispiel: input type="file" name="upfile"

  
use CGI;  
my $cgi = CGI->new;  
my $fh = $cgi->param('upfile'); # Dateihandle  
  
# Datei an einen anderen Platz kopieren  
# gleich aus dem Handle heraus  
use File::Copy;  
copy($fh, '/foo/bar/myfile'); # $! im Fehlerfall abfragen  

Den Type könntest Du so befragen:
my $type = $cgi->uploadInfo($fh)->{'Content-Type'};

Was jedoch nicht sehr verlässlich ist, das wäre zu testen, genauso wie das Ermitteln des Type mit File::Type. Letztgenanntes Modul erstellt ein eigenes Handle aus dem Dateinamen, den bekommst Du mit dem CGI-Objekt und tmpFileName() für die temporäre Datei, wo CGI.pm anlegt.

Hotti