美文网首页
Laravel 路由匹配带路径的文件名实现文件下载

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

作者: TerryLaravel | 来源:发表于2019-10-17 18:30 被阅读0次

    问题的提出

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

    相关文章

      网友评论

          本文标题:Laravel 路由匹配带路径的文件名实现文件下载

          本文链接:https://www.haomeiwen.com/subject/ruuvmctx.html