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

问题的提出

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容