LordRayden: Fileupload Bug

Hi!

Hab folgendes Problem:
Ich verwende ein Perlscript um Dateien über Formulare auf meinen Webserver zu laden. Das perlscript hab ich glaub ich eh irgendwo aus selfhtml herauskopiert.
Die ganze Sache funktioniert grundsätzlich auch tadellos. Alle files kommen am server an und sind vollständig.

Allerdings etwas zu vollständig:
Wenn ich Windows-Media-Videos rauflade dann sind sie im vergleich zum original um 1 byte zu gross.
Ich kann die Videos im Player zwar problemlos abspielen, aber der WindowsMedia-StreamingServer ist etwas sensibler und sagt das der Abschluss der Datei nicht richtig ist.

Also:
Wie kriege ich das überflüssige Byte wieder raus?
Wie kann ich verhindern das es überhaupt geschrieben wird?
Warum ist es überhaupt da?

Hier der Auszug aus dem Code:

Schreibe die Datei auf den Server

Die Routine gibt die Anzahl an Bytes zurueck, die es geschrieben hat.

sub writefile
 {
 local *DAT;
 my $self = shift;
 my $fieldname = shift;

if($fieldname eq "")
  { return undef; }

my $filename = shift || $formdata->{$fieldname}->{"filename"};

open(DAT,">".$filename) or die("Fileupload.pm: Error: $!");
 binmode DAT;
 print DAT $formdata->{$fieldname}->{"content"};
 close(DAT);

return length($formdata->{$fieldname}->{"content"});
 }

  1. Hi,

    also deine Fehlerbeschreibung hilft leider nicht so wirklich viel :(

    Ich vermute den fehler in der Sturktur der form/multipart - Architektur in Tat-
    einheit mit dem CRLF-Problem. Also mal noch ein paar angaben wären notendig:

    1. Betriebsystem des Uploadrechners (auch der Client ist wichtig, da mozilla
       selbst unter Win den Zeilenumbruch löblicherweise auf \n reduziert)
    2. Betriebsystem des Rechners auf dem das Perlscript läuft (die Scripte sind
       normalerweise auf POSIX optimiert, aber bei dier könnte das ein NT-Server
       sein)

    3. Zum Bujagen mal folgendes machen:
       - kleines Video-File erstellen / speichern
       - per fileupload hochjagen
       - per _FTP_ im _binary_ dowloaden
       - per Hexeditor vergleichen
    Nachsehen ob das Zeichen(8bit/1byte) vorne oder hinten dran ist. Sequenz
    isolieren und fesstellen was es ist (ich vermute und hoffe es ist ein CR
    hinten dran. Dann reich ein simples chop (very quick 'n dirty))

    bye eddie

    1. Hi,

      also deine Fehlerbeschreibung hilft leider nicht so wirklich viel :(

      sorry!

      Ich vermute den fehler in der Sturktur der form/multipart - Architektur in Tat-
      einheit mit dem CRLF-Problem. Also mal noch ein paar angaben wären notendig:

      1. Betriebsystem des Uploadrechners (auch der Client ist wichtig, da mozilla
           selbst unter Win den Zeilenumbruch löblicherweise auf \n reduziert)

      Win2000 Professional SP2, InternetExplorer

      1. Betriebsystem des Rechners auf dem das Perlscript läuft (die Scripte sind
           normalerweise auf POSIX optimiert, aber bei dier könnte das ein NT-Server
           sein)

      Win2000 Server SP2

      1. Zum Bujagen mal folgendes machen:
           - kleines Video-File erstellen / speichern
           - per fileupload hochjagen
           - per _FTP_ im _binary_ dowloaden
           - per Hexeditor vergleichen
        Nachsehen ob das Zeichen(8bit/1byte) vorne oder hinten dran ist. Sequenz
        isolieren und fesstellen was es ist (ich vermute und hoffe es ist ein CR
        hinten dran. Dann reich ein simples chop (very quick 'n dirty))

      hast recht!
      Ab sofort nenn ich dich Gott!
      Falls du zufällig mal in Pinkafeld (Österreich) vorbeikommst hast ein Bier bei mir gut *g*

      Aber: fällt dir eine nich so schmutzige Lösung wie das chop ein?
      Muss aber nicht sein, immerhin läufts ja jetzt.

      bye eddie

      lg LordRayden

      PS: danke nochmal Gott! Falls du einen Fanclub hast, wo kann ich mich anmelden?

      1. Hallo,

        also deine Fehlerbeschreibung hilft leider nicht so wirklich viel :(

        sorry!

        alles nicht so schlimm

        1. Betriebsystem des Uploadrechners (auch der Client ist wichtig, da mozilla
             selbst unter Win den Zeilenumbruch löblicherweise auf \n reduziert)
          Win2000 Professional SP2, InternetExplorer
        1. Betriebsystem des Rechners auf dem das Perlscript läuft (die Scripte sind
             normalerweise auf POSIX optimiert, aber bei dier könnte das ein NT-Server
             sein)
          Win2000 Server SP2

        nun das hat sich damit erledigt...

        hast recht!
        Ab sofort nenn ich dich Gott!

        ist nicht nötig :)

        Falls du zufällig mal in Pinkafeld (Österreich) vorbeikommst hast ein Bier bei mir gut *g*

        ist vorgemerkt :)

        Aber: fällt dir eine nich so schmutzige Lösung wie das chop ein?

        nun es gibt einen unterschied zwischen chop und chomp. zum schnell nachlesen:
        http://www.webclass.ru/show.php3?tip=74
        du könntes also $/ deklarieren und dann chomp anwenden, da bei upload von einem
        anderen client (mozilla z.b.) das CR nicht mitgesendet wird.

        Am besten wäre es die multipart-parsing routine in fileupload.pm zu verbessern
        oder sich den Artikel von CK reinzuziehen http://aktuell.de.selfhtml.org/artikel/cgiperl/file-upload/index.htm, um den
        Upload über CGI.pm zu erledigen. Irgenwo im Forum geistert auch noch eine
        fileupload routine rum, die wie auch CGI.pm darauf basiert, die CRLF-Sequenz
        zu bestimmen, um dann das Multipart-Form korrekt zu parsen. Sie ist halt nur
        kleiner als CGI.pm

        Muss aber nicht sein, immerhin läufts ja jetzt.

        Probier bitte mal das File mit mozilla hochzujagen, das könnte bei der
        Verwendung von chop Ärger stiften!

        bye eddie

        PS: danke nochmal Gott! Falls du einen Fanclub hast, wo kann ich mich anmelden?

        ... mir ist nix bekannt :)