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
然后生成软连接:
php artisan storage:link
重点来了!!!!
我直接访问这个资源,报404错误:
我访问同在 Public 目录下别的文件夹下的图片是可以访问的,但是偏偏就这个软连接目录下的资源无法访问:
如下图所示,也就是说 /public/mahcineImg 下的资源能访问,/public/storage 下的资源访问不了:
解决办法
通过多方搜索,我终于发现了解决办法,但我并不明白原理是怎样的。
关键点就在于我是在控制台下直接通过命令生成的软连接,这样做是不行的!!!
正确做法是先要进入workspace容器:
sudo docker-compose exec workspace bash
然后在容器里生成软连接:
再访问EXCEL资源:
下载成功!!
头发都抓掉一大把,看到成功下载的这一刻,桌子都差点掀掉了。
希望能帮到碰到同样问题的你~
本作品采用《CC 协议》,转载必须注明作者和本文链接
你用了docker,就应该在docker里创建软链接才对吧!你在外面创建使用的cli不一样,相对路径也不一样