2012-04-14 21 views
10

Próbowałem Mojolicious ramy sieci w oparciu o Perl. I staram się opracować pełną aplikację zamiast Lite. Problem, który napotykam, polega na tym, że próbuję przesłać pliki na serwer, ale poniższy kod nie działa.Jak przesłać plik za pomocą Mojolicious?

Proszę wskazać mi, co jest z nim nie tak. Ponadto, jeśli plik zostanie przesłany, to jest on w folderze publicznym aplikacji lub w innym miejscu.

Z góry dziękuję.

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

widzę, że w dokumentacji Mojolicious :: Lite wywołanie '$ samo-> req-> Dodaj()' jest owinięty w 'if()', co oznacza, że ​​jego wartość zwracana jest sprawdzana przed założeniem, że nastąpiło przesłanie. Jest to równoważne ze sprawdzeniem wartości zwracanej przez open, tak przypuszczam. – DavidO

Odpowiedz

8

(pierwsze, trzeba jakąś formę HTML z method="post" i enctype="multipart/form-data" oraz input type="file" z name="upload". Wystarczy, aby się upewnić.)

Gdyby nie było żadnych błędów, $fileuploaded byłoby Mojo::Upload. Następnie możesz sprawdzić jego rozmiar, jego nagłówki, możesz je siorbać lub przesunąć, z $fileuploaded->move_to('path/file.ext').

Zaczerpnięte z strange example.

+0

Dzięki menozero, część HTML jest taka sama jak wspomniano. Przeszedłem przez link pod warunkiem, ale rozwija się w oparciu o Mojolicious :: Lite i pełną aplikację. A w moim przypadku '$ fileuploaded' ma pustą wartość, więc nie jestem do końca pewien, co aktualnie dzieje się nie tak. –

+0

Działa idealnie dobrze dla mnie. Wielkie dzięki! To powinno być zaakceptowane jako rozwiązanie przez Kunala Jha. Problem z nim jest gdzieś indziej ... –

+0

Którą bibliotekę powinienem obejrzeć, aby móc dostarczać pliki do pobrania? – user1876508

0

Można użyć Mojolicious :: Plugin :: renderFile

Mojolicious::Plugin::RenderFile

+3

Zgodnie z dokumentacją, którą połączyłeś, RenderFile służy do przesyłania strumieniowego, a nie do przesyłania. –

Powiązane problemy