问题的提出
Laravel提供文件的下载是很方便的,
当文件保存在public文件夹以外的地方,即不能通过url直接访问的地方,通过url访问这个文件时,需要我们手工解析路由,分离出文件保存的路径,并返回下载响应。那么如何在路由中匹配文件名及其路径呢?
形如:
http://suicha.top/manual/pdf/数控专家.pdf
这个url对应的路由为:
Route::get('/manual/{filename}');
控制器对应的方法是
public function download($filename)
{
return Storage::disk('xxxx')->download('$filename,'filename');
}
运行代码,访问上文中的url: http://suicha.top/manual/pdf/数控专家.pdf,提示找不到页面报错404>
原因分析
这是因为,Laravel 对路由的解析默认是以"/"分隔的,但是在本案中,我们想把“pdf/数控专家.pdf”作为一个整体来识别,那么如何处理呢?
解决办法
Laravel提供了强大的正则匹配功能来设置路由,只需要在上面的路由设置中加上where设置即可
Route::get('/manual/{filename}')->where('filename', '.*');
Good luck!!!