HTTP File-Upload mit mod_perl2

HTTP File-Upload mit mod_perl2

am 07.04.2006 15:03:05 von Thomas Zirngibl

Hi,

hat jemand erfahrung mit http-file-uploads und mod_perl2? Ich weiß, dass
sich das irgendwie mit apache2-filtern machen lässt, aber es würde mich
wundern, wenn's nicht auch einfacher ginge. Bisher hab ich's mit dem
CGI-modul versucht, das liefert statt einem filehandle aber undef.

Grüße,
Thomas

Re: HTTP File-Upload mit mod_perl2

am 07.04.2006 15:38:28 von Dominik Seelow

Thomas Zirngibl wrote:
> Hi,
>
> hat jemand erfahrung mit http-file-uploads und mod_perl2? Ich weiß, dass
> sich das irgendwie mit apache2-filtern machen lässt, aber es würde mich
> wundern, wenn's nicht auch einfacher ginge. Bisher hab ich's mit dem
> CGI-modul versucht, das liefert statt einem filehandle aber undef.

Hallo Thomas,

der sauberste Weg ist IMHO die Verwendung von mod_apreq2.so - jedenfalls
benutze ich das (da da aber noch HTML::Mason mit im Spiel ist, ist es
noch etwas komplizierter als in einer reinen mp2 Umgebung).
Dann sollte es aber auch streßfrei mit Apache2::Upload gehen.

Mit CGI.pm geht es bei mir aber auch. Wie sieht denn Dein Script aus?


Viele Grüße,
Dominik

Re: HTTP File-Upload mit mod_perl2

am 07.04.2006 16:19:25 von Thomas Zirngibl

Hi Dominik,

Dominik Seelow schrieb:
> Mit CGI.pm geht es bei mir aber auch. Wie sieht denn Dein Script aus?

Das skript ist folgendes (s.u.). Wenn ich das ganze als reines cgi-skript
laufen lasse (ohne Apache2-module und handler()-methode), funktioniert
alles prächtig. Muss wohl wirklich an apache2 liegen, fragt sich nur, wo.

Viele grüße,
Thomas

=============== SCRIPT ================
package Test::Handler;

use strict;
use Apache2::RequestRec();
use Apache2::RequestIO();
use Apache2::RequestUtil();
use Apache2::Const ':common';
use CGI::Carp 'fatalsToBrowser';
use CGI;
use Data::Dumper;

use lib '/srv/www/perl-lib/Test';

sub handler {
my $r = shift;
$r->content_type('text/html');
action($r);
return OK;
};

sub action {
my $r = shift;
my $C = new CGI();

$C->start_html(-title => 'Upload-Test');

if ($C->param('upload')) {
my $filehandle = $C->upload('uploaded_filename');

print Dumper $filehandle;

# Hier code zum lesen & schreiben ...

} else {
# Dateifeld anzeigen:
print $C->start_multipart_form( -action => '',
-method => 'POST',
-maxlength => '10485760', # dateigroesse max 10 MB;
-accept => 'text/*',
);
print $C->filefield( -name => 'uploaded_file',
-size => 80,
);
print $C->br, $C->submit( -name => 'upload', -value => 'Los!' );
print qq();
}
$C->end_html;
}

1;

=============== SCRIPT END ================

Re: HTTP File-Upload mit mod_perl2

am 07.04.2006 16:33:16 von Dominik Seelow

Thomas Zirngibl wrote:
> Hi Dominik,
>
> Dominik Seelow schrieb:
>> Mit CGI.pm geht es bei mir aber auch. Wie sieht denn Dein Script aus?
>
> Das skript ist folgendes (s.u.). Wenn ich das ganze als reines cgi-skript
> laufen lasse (ohne Apache2-module und handler()-methode), funktioniert
> alles prächtig. Muss wohl wirklich an apache2 liegen, fragt sich nur, wo.
>
> Viele grüße,
> Thomas
>
> =============== SCRIPT ================
> package Test::Handler;
>
> use strict;
> use Apache2::RequestRec();
> use Apache2::RequestIO();
> use Apache2::RequestUtil();
> use Apache2::Const ':common';
> use CGI::Carp 'fatalsToBrowser';
> use CGI;
> use Data::Dumper;
>
> use lib '/srv/www/perl-lib/Test';
>
> sub handler {
> my $r = shift;
> $r->content_type('text/html');
> action($r);
> return OK;
> };

(SCHNIPP)

Achso, ich hatte an ein klassisches CGI Script gedacht... Das hier ist
ja mod_perl. Dazu kann ich eigentlich nix sagen...
Es kann aber gut sein, daß Apache2::Request benötigt wird, wenn ein
mod_perl2 Objekt benutzt wird. Und dafür wäre dann wieder libapreq
erforderlich.
Läßt sich aber ohne Probleme installieren und es müssen auch nur 2
Zeilen in der httpd.conf hinzugefügt werden:

LoadModule apreq_module modules/mod_apreq2.so
AddInputFilter apreq2 mpl mhtml

(mpl und mhtml stehen hier für mod_perl und Mason)

Viele Grüße,
Dominik

Re: HTTP File-Upload mit mod_perl2

am 07.04.2006 16:43:00 von Thomas Zirngibl

> Es kann aber gut sein, daß Apache2::Request benötigt wird, wenn ein
> mod_perl2 Objekt benutzt wird. Und dafür wäre dann wieder libapreq
> erforderlich.

Ok, dann versuch ich's mal mit libapreq.
Danke & grüße!
Thomas