2015-11-23 125 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下載{$ self-> param ('我應該放什麼')}' –

+0

@AruneshSingh'$ self> param('file')'。 –

+0

它將整個路徑作爲'/ download/file/path/foo.txt',但我只想要'/ file/path/foo.txt'。我應該使用'regex'或任何其他想法刪除它 –