Laravel 路由匹配带路径的文件名实现文件下载

2019-10-17  本文已影响0人  TerryLaravel

问题的提出

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!!!

上一篇下一篇

猜你喜欢

热点阅读