Perl 如何使用Mojolicious上传文件?
我一直在尝试基于perl的Mojolicous web框架。我尝试开发一个完整的应用程序,而不是Lite。我面临的问题是,我试图将文件上载到服务器,但下面的代码不起作用 请告诉我有什么问题。此外,如果文件被上传,那么它是在应用程序的公共文件夹中还是其他地方 提前谢谢Perl 如何使用Mojolicious上传文件?,perl,file-upload,mojolicious,Perl,File Upload,Mojolicious,我一直在尝试基于perl的Mojolicous web框架。我尝试开发一个完整的应用程序,而不是Lite。我面临的问题是,我试图将文件上载到服务器,但下面的代码不起作用 请告诉我有什么问题。此外,如果文件被上传,那么它是在应用程序的公共文件夹中还是其他地方 提前谢谢 sub posted { my $self = shift; my $logger = $self->app->log; my $filetype = $self->req->param('filet
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.');
}
(首先,您需要一些带有method=“post”
和enctype=“multipart/form data”
的HTML表单,以及带有name=“upload”
的input type=“file”
。)
如果没有错误,$fileupload
将是一个Mojo::Upload
。然后你可以检查它的大小,它的标题,你可以用$fileuploaded->move_to('path/file.ext')
将它弄脏或移动
摘自。您可以使用Mojolicious::Plugin::RenderFile
要处理上传文件,您应该使用
$c->req->uploads
post '/' => sub {
my $c = shift;
my @files;
for my $file (@{$c->req->uploads('files')}) {
my $size = $file->size;
my $name = $file->filename;
push @files, "$name ($size)";
$file->move_to("C:\\Program Files\\Apache Software Foundation\\Apache24\\htdocs\\ProcessingFolder\\".$name);
}
$c->render(text => "@files");
} => 'save';
请参阅此处的完整代码:我确实在Mojolicous::Lite文档中看到,对
$self->req->upload()
的调用被包装在if()
中,这意味着在假设有上载之前,将检查其返回值。我想,这样做相当于检查open的返回值。Thank menozero的可能重复,HTML部分与您提到的相同。我已经浏览了提供的链接,但它是基于Mojolicious::Lite和完整应用程序开发的。在我的例子中,$fileuploaded
的值为空,所以我不太确定当前出了什么问题。对我来说效果非常好。非常感谢menozero!这应该被Kunal Jha接受为解决方案。他的问题出在其他地方…我应该看哪个库来提供要下载的文件?根据您链接的文档,RenderFile是用于流式下载,而不是上载。