Я пытаюсь загрузить файл с помощью mojolicious, а затем после некоторого изменения, я хочу загрузить тот же файл. Часть загрузки файлов - это нормально. Но я не уверен, как обрабатывать маршруты для загрузки файла.Обработка метки привязки в mojolicious
Controller
:
sub upload{
my $self=shift;
my $upload=$self->param('fileName');
my $file_name=$upload->filename;
$self->render(file=>"$file_name",
filepath=>$filepath
);
}
У меня есть это в шаблоне upload.html.ep
.
<body>
Successfully uploaded file: <%=$file%><br/>
<a href="download/<%= $filepath %>" class="button">
Download!
</a>
Теперь a href
генерируется здесь a href=download/file/path/foo.txt
. Как обрабатывать маршрут для этого пути?
my $r = $self->routes;
# Normal route to controller
$r->get('/')->to('example#welcome');
$r->post('/upload')->to('example#upload'); #working well
$r->get('/download/:file')->to('example#download'); # not working
Я получаю ошибки как:
None of these routes could generate a response for your GET request for
/download/file/path/foo.txt.
Я думал местоблюстителем работает таким образом.
Если '$ filepath' содержит косую черту'/'маршрутизации запутается, потому что он ожидает один аргумент. Попробуйте использовать _filename_ без полного пути (в любом случае вы не должны его раскрывать). Он должен выглядеть примерно так: 'http: // example.org/download/myfile.txt', где' myfile.txt' является _filename_. Сравните с маршрутом '/ product /: id/details', где' $ id' также не разрешено иметь косую черту, так как это приводит к разрыву соответствия маршрута. (Это предварительная догадка, поскольку я недостаточно знаком с Mojo, но если это сработает, я напишу это как ответ.) – simbabque