2012-04-14 55 views
10

我一直在嘗試基於Perl的Mojolicious web框架。我試圖開發一個完整的應用程序,而不是Lite。我面臨的問題是我試圖上傳文件到服務器,但下面的代碼不起作用。如何使用Mojolicious上傳文件?

請指導我它有什麼問題。另外,如果文件上傳,那麼它是在應用程序的公用文件夾或其他地方。

在此先感謝。

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

我看到Mojolicious ::精簡版文檔調用'$自我> req->上傳()'是包裹在一個'if()'中,這意味着在假定有一個上傳之前它的返回值被檢查。這樣做相當於檢查開放的回報值,我想。 – DavidO 2012-04-14 15:10:07

回答

8

(首先,你需要method="post"enctype="multipart/form-data",並與name="upload"一個input type="file"一些HTML表單,只是可以肯定的。)

如果沒有錯誤,$fileuploaded將是一個Mojo::Upload。然後你可以檢查它的大小,標題,你可以啜泣它或移動它,與$fileuploaded->move_to('path/file.ext')

取自strange example

+0

感謝menozero,HTML部分與您提到的相同。我已經通過提供的鏈接,但它正在開發基於Mojolicious :: Lite和完整的應用程序。在我的例子中,'$ fileuploaded'具有空值,所以我不確定當前出錯的是什麼。 – 2012-04-16 06:50:16

+0

對我來說工作得很好。非常感謝menozero!這應該被Kunal Jha解決。從他的問題是別的地方... – 2012-11-08 14:10:05

+0

我應該看看哪些庫提供文件下載? – user1876508 2013-02-15 02:03:33

0

您可以使用Mojolicious ::插件:: RenderFile模塊

Mojolicious::Plugin::RenderFile

+3

根據您鏈接的文檔,RenderFile用於流式下載,而不是上傳。 – 2013-04-25 15:09:42