通过路由让某个目录静态文件可以被访问

walkor

有开发者希望能够通过路由让某个目录静态文件可以被访问,例如开发者开发了一个后台插件,插件的静态文件全部在 vendor/foo/admin/src/public下,则可以在config/route.php中添加下面路由让其可以被访问。

Route::any('/your/path/[{path:.+}]', function (Request $request, $path = '') {
    // 静态文件目录
    $static_base_path = base_path() . '/vendor/foo/admin/src/public';
    // 安全检查,避免url里 /../../../password 这样的非法访问
    if (strpos($path, '..') !== false) {
        return response('<h1>400 Bad Request</h1>', 400);
    }
    // 文件
    $file = "$static_base_path/$path";
    if (!is_file($file)) {
        return response('<h1>404 Not Found</h1>', 404);
    }
    return response('')->withFile($file);
});

这样通过url http://127.0.0.1:8787/your/path/xx/xx.js 访问静态文件了。

3545 7 21
7个评论

楚羽幽

感谢大佬分享

wolfcode

Route::any('/your/path/[{path:.+}]', function (Request $request, $path)
最好改成
Route::any('/your/path/[{path:.+}]', function (Request $request, $path='')
不然访问/your/path/会报错

cbasil

这个功能非常nice

  • sMkb9l6r 2022-12-07

    有一个场景, 在一个监控端接收所有房间的新消息,workman能实现吗

xianrenqh

这个功能非常 N I C E

  • 暂无评论
dangpengsong

老大,有个小建议,网站可以在个人主页加上历史回答吗,有功底的开发者一般回答质量比较高,浏览问答模块,不应该只在有问题的时候来,没事了来看看别人的回答,特别是高质量的答案,对框架的理解,知识栈补充,思路拓展都很有帮助

dangpengsong

老大,有个疑问,request->file('name')不支持多文件上传,上传多文件每次仅能获取一个,parse_str解析url类似image=0&image=1&ceshi=2这种多文件的会产生覆盖问题,这个是框架设计为了简化数据结构还是bug呢,我修改了框架代码修复这个问题,因为返回的结果不再固定是UploadFile实例,也可能是UploadFile实例的数组,用之前还要进行判断,所以问一下这里是什么情况,如果不是这样设计的,能不能修复一下这个问题,我去更新一下版本

  • dangpengsong 2023-04-21

    噢,看错了,这样返回都是数组,单文件是只有一个元素的数组

  • walkor 2023-04-21

    新问题单独发帖子吧

neoone180

请教一个问题,gatewayWorker是否还存在粘包分包问题。如果我单独使用workman则存在。gatewayWorkman中的是否处理了粘包和分包的问题?

  • 暂无评论
年代过于久远,无法发表评论

walkor

140501
积分
0
获赞数
0
粉丝数
2014-05-04 加入
🔝