2012-04-14 57 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