2012-04-14 14 views
10

Ich habe versucht, Mojolicious Web-Framework basierend auf Perl. Und ich habe versucht, eine vollständige Anwendung anstelle des Lite zu entwickeln. Das Problem, mit dem ich konfrontiert bin, ist, dass ich versuche, Dateien auf den Server hochzuladen, aber der folgende Code funktioniert nicht.Wie Upload-Datei mit Mojolicious?

Bitte führen Sie mich, was falsch ist mit ihm. Wenn die Datei hochgeladen wird, befindet sie sich auch im öffentlichen Ordner der Anwendung oder an einem anderen Ort.

Vielen Dank im Voraus.

sub posted { 
my $self = shift; 
my $logger = $self->app->log; 

my $filetype = $self->req->param('filetype'); 
my $fileuploaded = $self->req->upload('upload'); 

$logger->debug("filetype: $filetype"); 
$logger->debug("upload: $fileuploaded"); 

return $self->render(message => 'File is not available.') 
    unless ($fileuploaded); 

return $self->render(message => 'File is too big.', status => 200) 
    if $self->req->is_limit_exceeded; 

# Render template "example/posted.html.ep" with message 
$self->render(message => 'Stuff Uploaded in this website.'); 
} 
+0

Ich sehe nicht, dass in der Mojolicious :: Lite Dokumentation der Aufruf von '$ self-> req-> laden()' ist gewickelt in einem 'if()', was bedeutet, dass sein Rückgabewert überprüft wird, bevor angenommen wird, dass ein Upload stattgefunden hat. Dies ist das Äquivalent, den Rückgabewert von open zu prüfen, nehme ich an. – DavidO

Antwort

8

(Zuerst müssen Sie einige HTML-Formular mit method="post" und enctype="multipart/form-data" und einem input type="file" mit name="upload". Nur um sicher zu sein.)

Wenn keine Fehler aufgetreten sind, $fileuploaded ein Mojo::Upload wäre. Dann könntest du seine Größe, seine Überschriften überprüfen, du könntest es schlürfen oder es bewegen, mit $fileuploaded->move_to('path/file.ext').

Aus einer strange example übernommen.

+0

Danke menozero, der HTML-Teil ist der gleiche wie du erwähnt hast. Und ich habe den angegebenen Link durchgelesen, aber er entwickelt sich basierend auf der Mojolicious :: Lite und vollen Anwendung. Und in meinem Fall hat 'fileuploaded' einen leeren Wert, also bin ich mir nicht sicher, was gerade falsch läuft. –

+0

Funktioniert perfekt für mich. Vielen Dank menozero! Dies sollte als Lösung von Kunal Jha akzeptiert werden. Das Problem von ihm ist woanders ... –

+0

Welche Bibliothek sollte ich mir ansehen, wenn ich Dateien zum Herunterladen bereitstelle? – user1876508

0

können Sie Mojolicious verwenden :: Plugin :: Render

Mojolicious::Plugin::RenderFile

+3

Gemäß der Dokumentation, die Sie verlinkt haben, dient RenderFile zum Streamen von Downloads, nicht zum Hochladen von Dateien. –

Verwandte Themen