HTTP File Upload - 0Byte (oder ein Wald voller Bäume)
HTTP File Upload - 0Byte (oder ein Wald voller Bäume)
am 18.03.2006 11:12:42 von Heiko Rompel
Moin,
wenn ich Script 1 alleine laufen lasse,
klappt alles wie es soll.
Wenn ich Script 2 als Teil eines Scriptes laufen lasse,
dann werden die Dateien alle mit 0 Byte angelegt.
Also selbst wenn ich die Lade-und Schreibteile aus
Script 1 in Script 2 kopiere klappt es nicht.
Warum? Was übersehe ich?
MfG
Heiko
=========== Script 1 (Quelle : SelfHTML) =======
#!/usr/bin/perl -w
use strict;
use CGI; # Modul fuer CGI-Programme
use File::Basename;
my $cgi = new CGI; # neues Objekt erstellen
# Content-type fuer die Ausgabe
print $cgi->header(-type => 'text/html');
# die datei-daten holen
# die datei-daten holen
my $pic_name = $cgi->param("myfile");
(my $filename,my $path) = fileparse $pic_name;
$filename =~ s/([^\w.-])/_/g;
$filename =~ s/^[-.]+//;
# Dateiendungen überprüfen
# Splitten des Dateinamens in Dateiname und Endung
(my $bildname,my $endung) = split(/\./, $filename);
$endung = lc($endung);
# dateinamen erstellen und die datei auf dem server speichern
my $filename = 'upload/file_'.'_'.$ENV{REMOTE_ADDR}.'_'.time.'.'.$endung;
open DAT,'>'.$filename or die 'Error processing file: ',$!;
# Dateien in den Binaer-Modus schalten
binmode $pic_name;
binmode DAT;
my $data;
while(read $pic_name,$data,1024) {
print DAT $data;
}
close DAT;
============= Script 2 =======================
sub user_write {
use File::Basename;
my @file;
my $nam= $q->param("NAME");
my $txt= $q->param("TEXT");
my $pic_name= $q->param("PIC_NAME");
my $float= $q->param("float");
(my $filename,my $path) = fileparse $pic_name;
$filename =~ s/([^\w.-])/_/g;
$filename =~ s/^[-.]+//;
# Dateiendungen überprüfen
# Splitten des Dateinamens in Dateiname und Endung
(my $bildname,my $endung) = split(/\./, $filename);
$endung = lc($endung);
if (($endung eq "jpg") or ($endung eq "jpeg") or ($endung eq "bmp")){
# dateinamen erstellen und die datei auf dem server speichern
$filename = 'upload/file_'.'_'.$ENV{REMOTE_ADDR}.'_'.time.'.'.$endung;
open DAT,'>'.$filename or die 'Error processing file: ',$!;
# Dateien in den Binaer-Modus schalten
binmode $pic_name;
binmode DAT;
my $data;
while(read "$pic_name",$data,1024) {
print DAT $data;
}
close DAT;
}
$filename="
";
Re: HTTP File Upload - 0Byte (oder ein Wald voller Bäume)
am 18.03.2006 13:24:06 von Slaven Rezic
"Heiko Rompel" writes:
> Moin,
>
> wenn ich Script 1 alleine laufen lasse,
> klappt alles wie es soll.
>
> Wenn ich Script 2 als Teil eines Scriptes laufen lasse,
> dann werden die Dateien alle mit 0 Byte angelegt.
>
> Also selbst wenn ich die Lade-und Schreibteile aus
> Script 1 in Script 2 kopiere klappt es nicht.
>
> Warum? Was übersehe ich?
>
Warum hast du $pic_name in Skript 2 in Anführungszeichen gesetzt?
--
Slaven Rezic - slaven rezic de
Lost in your Tk widget tree? Try
http://user.cs.tu-berlin.de/~eserte/src/perl/Tk-WidgetDump/
Re: HTTP File Upload - 0Byte (oder ein Wald voller B
am 18.03.2006 13:34:50 von Heiko Rompel
Hallo,
> Warum hast du $pic_name in Skript 2 in Anführungszeichen gesetzt?
Nur um zu testen, ob es vielleicht an dem Pfad (Leerzeichen, etc) liegt.
brachte aber nichts.
MfG
Heiko
Re: Re: HTTP File Upload - 0Byte (oder ein Wald voller Bäume)
am 18.03.2006 14:40:02 von Slaven Rezic
"Heiko Rompel" writes:
> Hallo,
>
> > Warum hast du $pic_name in Skript 2 in Anführungszeichen gesetzt?
>
> Nur um zu testen, ob es vielleicht an dem Pfad (Leerzeichen, etc) liegt.
> brachte aber nichts.
$pic_name wird im read als Filehandle genutzt. Das in
Anführungszeichen zu setzen könnte falsch sein.
Vielleicht solltest du statt param() upload() verwenden, wie es auch
in der CGI.pm-Dokumentation mittlerweile empfohlen wird.
Gruß,
Slaven
--
Slaven Rezic - slaven rezic de
tkruler - Perl/Tk program for measuring screen distances
http://ptktools.sourceforge.net/#tkruler
Re: Re: HTTP File Upload - 0Byte (oder ein Wald voller
am 18.03.2006 17:30:58 von Heiko Rompel
Hallo,
"Slaven Rezic" schrieb:
> $pic_name wird im read als Filehandle genutzt. Das in
> Anführungszeichen zu setzen könnte falsch sein.
Habe ich auch schon wieder entfernt.
> Vielleicht solltest du statt param() upload() verwenden, wie es auch
> in der CGI.pm-Dokumentation mittlerweile empfohlen wird.
Wenn das Script läuft, kann ich das noch ändern.
Jetzt interessiert mich ermal, warum das Script 1 aus SelfHTML
läuft und wenn es Teil eines anderen Scriptes ist - nicht.
MfG
Heiko
Re: Re: Re: HTTP File Upload - 0Byte (oder ein Wald voller Bäume)
am 18.03.2006 17:57:16 von Slaven Rezic
"Heiko Rompel" writes:
> Hallo,
>
> "Slaven Rezic" schrieb:
>
> > $pic_name wird im read als Filehandle genutzt. Das in
> > Anführungszeichen zu setzen könnte falsch sein.
>
> Habe ich auch schon wieder entfernt.
>
> > Vielleicht solltest du statt param() upload() verwenden, wie es auch
> > in der CGI.pm-Dokumentation mittlerweile empfohlen wird.
>
> Wenn das Script läuft, kann ich das noch ändern.
> Jetzt interessiert mich ermal, warum das Script 1 aus SelfHTML
> läuft und wenn es Teil eines anderen Scriptes ist - nicht.
Vielleicht löst upload() dein Problem. param() in Verbindung mit
File-Uploads schien mir immer Black Magic zu sein.
--
Slaven Rezic - slaven rezic de
Visualize Makefiles with GraphViz:
http://user.cs.tu-berlin.de/~eserte/src/perl/GraphViz-Makefi le/
Re: Re: Re: HTTP File Upload - 0Byte (oder ein Wald vo
am 18.03.2006 18:53:46 von Heiko Rompel
Hallo,
"Slaven Rezic" schrieb:
> Vielleicht löst upload() dein Problem. param() in Verbindung mit
> File-Uploads schien mir immer Black Magic zu sein.
Aber wenn ich einfach das param() durch ein upload() ersetze,
dann meckert fileparse.
Ich habe das jetzt mit 2 Variablen und upload() gelöst.
Jetzt muss ich nur noch APACHE richtig konfigurieren.
Denn vorhanden sind die Files nur anzeigen geht nicht.
MfG
Heiko
Re: Re: Re: Re: HTTP File Upload - 0Byte (oder ein Wald voller Bäume)
am 19.03.2006 10:27:50 von Slaven Rezic
"Heiko Rompel" writes:
> Hallo,
>
> "Slaven Rezic" schrieb:
>
> > Vielleicht löst upload() dein Problem. param() in Verbindung mit
> > File-Uploads schien mir immer Black Magic zu sein.
>
> Aber wenn ich einfach das param() durch ein upload() ersetze,
> dann meckert fileparse.
Den Dateinamen erhälst du weiterhin mit param(). Den Filehandle mit
upload(). Weiterhin gibt es noch uploadInfo(), falls du weitere
Informationen aus dem Fileupload ziehen willst.
Gruß,
Slaven
--
Slaven Rezic - slaven rezic de
Start a WWW browser - OS independent:
http://user.cs.tu-berlin.de/~eserte/src/perl/WWWBrowser/