Fileupload Bug
LordRayden
- perl
0 Ed X0 LordRayden0 Ed X
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:
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"});
}
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
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:
- Betriebsystem des Uploadrechners (auch der Client ist wichtig, da mozilla
selbst unter Win den Zeilenumbruch löblicherweise auf \n reduziert)
Win2000 Professional SP2, InternetExplorer
- 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
- 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?
Hallo,
also deine Fehlerbeschreibung hilft leider nicht so wirklich viel :(
sorry!
alles nicht so schlimm
- Betriebsystem des Uploadrechners (auch der Client ist wichtig, da mozilla
selbst unter Win den Zeilenumbruch löblicherweise auf \n reduziert)
Win2000 Professional SP2, InternetExplorer
- 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 :)