Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何使用Mojolicious上传文件?_Perl_File Upload_Mojolicious - Fatal编程技术网

Perl 如何使用Mojolicious上传文件?

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

我一直在尝试基于perl的Mojolicous web框架。我尝试开发一个完整的应用程序,而不是Lite。我面临的问题是,我试图将文件上载到服务器,但下面的代码不起作用

请告诉我有什么问题。此外,如果文件被上传,那么它是在应用程序的公共文件夹中还是其他地方

提前谢谢

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是用于流式下载,而不是上载。