我正在Laravel中上传excel,以便使用Laravel-Excel进行处理。我有以下问题:
当我这样做时:
$file = $request->file('file')->store('Questionnaires', ['disk' => 'public']);
$file = asset($file);
dd($file);
我得到了预期的东西,例如:
http://project.test/Questionnaires/filename.xlsx
但是,当我将$file
传递给Laravel-Excel时:
$collection = Excel::toCollection(new QuestionnairesImport, $file);
我收到此错误:
File not found at path: http:/project.test/Questionnaires/filename.xlsx
这在http:/
中缺少正斜杠,即http://
这是怎么回事?
答案 0 :(得分:0)
好的,我解决了这个问题,并将答案保存在这里作为我自己的记录,以防对他人有用。
免责声明:我仍然不知道错误是由谁造成的,因此您可以根据自己的喜好考虑这种解决方法/错误修复/糟糕的想法。
我以这种方式修改了两个核心文件:
在readStream()
中的函数vendor/league/flysystem/src/adapter/local.php
中:
// original lines, removed:
//$location = $this->applyPathPrefix($path);
//$stream = fopen($location, 'rb');
// my addition (1 line):
$stream = fopen(asset($path), 'rb');
在readStream()
中的函数vendor/league/flysystem/src/filesystem.php
中:
// original line, removed:
//$this->assertPresent($path);
// my addition (1 line):
$path = str_replace('http:/a','http://a', $path);
在第一个功能中,它失败了,因为它无法打开路径-在Web地址前面添加了本地前缀。
在第二个函数中,它无法断言该文件是否存在,因为其中一个正斜杠已被删除(仍然不太确定如何...)。因此,我只是做了一个字符串替换以将其放回原位(“ a”是我的项目名称在APP_URL
中.ENV
中的首字母-您需要将其更改为的首字母。
这感觉非常肮脏,但是有效。希望我会遇到一个更好的解决方案。