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

Beitrag lesen

hi hotti, auf dich ist halt verlass :-)

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.

sind das mehrere dateien? oder nur eine datei?

ich stell mir das so vor. der browser sollte zuerst eine kleine info-datei mit allen file-infos schicken, die man dann abfragen kann bevor die hauptdatei temporär geschrieben wird. wenn bedingung a,b,x..erfüllt ist beginnt das schreiben, wenn nicht wird die infodatei gelöscht und gut is.

ich hab zuwenig ahnung davon wo dateiinfos in einer datei stehen und ob man die auslesen könnte bevor der grosse batzen geschrieben wird. aber genial wär das schon. ein dateiformat, das in den ersten x? 2048 bytes alle infos stehen hat.

"lese die ersten 2048, also alle datei-infos, und wenn passt dann mach alles rauf oder nix".

geht sowas wirklich nicht?

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


>   
  
ja, so ungefähr da bin ich schon.  
  

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

»»  
  
ok, probier ich gleich. wo erfahre ich welche infos ich je dateityp auslesen kann? content-type und content-length, das kanns doch nicht gewesen sein. z.b. die typischen infos einer mp4 oder flv datei wie spiellänge in sekunden, frameanzahl, aspectratio und dergleichen. youtube etc. kanns, oder?  
  

> Was jedoch nicht sehr verlässlich ist, das wäre zu testen, genauso wie das Ermitteln des Type mit `File::Type`{:.language-perl}. 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  
  
lernen ist irgendwie schei\*e, das wusste ich schon immer :-)  
  
- Gustl