2015-11-23 3 views
1

Я пытаюсь загрузить файл с помощью 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. 

Я думал местоблюстителем работает таким образом.

+0

Если '$ filepath' содержит косую черту'/'маршрутизации запутается, потому что он ожидает один аргумент. Попробуйте использовать _filename_ без полного пути (в любом случае вы не должны его раскрывать). Он должен выглядеть примерно так: 'http: // example.org/download/myfile.txt', где' myfile.txt' является _filename_. Сравните с маршрутом '/ product /: id/details', где' $ id' также не разрешено иметь косую черту, так как это приводит к разрыву соответствия маршрута. (Это предварительная догадка, поскольку я недостаточно знаком с Mojo, но если это сработает, я напишу это как ответ.) – simbabque

ответ

1

Вы должны использовать wildcard placeholders:

$r->get('/download/*file')->to('example#download'); 
+0

и как попасть в 'sub' означает в' sub download {$ self-> param ('here what should I put')} ' –

+0

@AruneshSingh' $ self-> param ('file') '. –

+0

Он принимает путь целиком '/ download/file/path/foo.txt', но мне нужен только'/file/path/foo.txt'. должен ли я удалить его с помощью 'regex' или любой другой идеи –

Смежные вопросы