Как загрузить файл с помощью Mojolicious?
Я пробовал Mojolicious web framework на основе perl. И я пытаюсь разработать полное приложение вместо 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.');
}
Ответы
Ответ 1
(Во-первых, вам нужна HTML-форма с method="post"
и enctype="multipart/form-data"
и input type="file"
с name="upload"
. Просто чтобы быть уверенным.)
Если бы не было ошибок, $fileuploaded
был бы Mojo::Upload
. Затем вы можете проверить его размер, его заголовки, вы можете отнять его или переместить с помощью $fileuploaded->move_to('path/file.ext')
.
Взятый из странного примера.
Ответ 2
Для обработки загрузки файлов вы должны использовать $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';
Смотрите полный код здесь: fooobar.com/questions/2200543/...
Ответ 3
Вы можете использовать Mojolicious:: Plugin:: RenderFile
Mojolicious:: Plugin:: RenderFile