Laradock 下创建 storage:link 软连接资源无法访问的解决办法

最近碰到一个需求,将用户筛选出来的数据导出 EXCEL ,保存文件在服务器上然后返回给前端一个下载的 URL 。

我用的是 Laravel-excel:

    use App\Exports\DataExport;
    .
    .
    .
    public function suggestExport()
    {
        $this->_repository->setModel(new SuggestModel);

        //获取到要导出的数据
        $result = $this->_repository->suggestExport();

        //设置EXCEL表头,trans()用于处理多语言文本
        $headings = [
            trans('mes.机床产线组'),
            trans('mes.设备名称'),
            trans('mes.姓名'),
            trans('mes.反馈类型'),
            trans('mes.反馈内容'),
            trans('mes.反馈时间'),
        ];

        //文件名
        $name = date('YmdHis').'.xlsx';

        //导出到/public/excel文件夹下
        (new DataExport($result, $headings))->store('/public/excel/'.$name);
        return $name;



然后在 /storage/app/public/excel/ 下生成了一个EXCEL 文件:20191124075909.xlsx

Laradock下创建storage:link软连接资源无法访问的解决办法

然后生成软连接:

php artisan storage:link

Laradock下创建storage:link软连接资源无法访问的解决办法

Laradock下创建storage:link软连接资源无法访问的解决办法

重点来了!!!!
我直接访问这个资源,报404错误:

Laradock下创建storage:link软连接资源无法访问的解决办法

我访问同在 Public 目录下别的文件夹下的图片是可以访问的,但是偏偏就这个软连接目录下的资源无法访问:

Laradock下创建storage:link软连接资源无法访问的解决办法

如下图所示,也就是说 /public/mahcineImg 下的资源能访问,/public/storage 下的资源访问不了:

Laradock下创建storage:link软连接资源无法访问的解决办法


解决办法

通过多方搜索,我终于发现了解决办法,但我并不明白原理是怎样的。

关键点就在于我是在控制台下直接通过命令生成的软连接,这样做是不行的!!!

正确做法是先要进入workspace容器:

sudo docker-compose exec workspace bash

然后在容器里生成软连接:

Laradock下创建storage:link软连接资源无法访问的解决办法

再访问EXCEL资源:

Laradock下创建storage:link软连接资源无法访问的解决办法

下载成功!!

头发都抓掉一大把,看到成功下载的这一刻,桌子都差点掀掉了。


希望能帮到碰到同样问题的你~

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 1

你用了docker,就应该在docker里创建软链接才对吧!你在外面创建使用的cli不一样,相对路径也不一样

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!