Laravel / Laravel-Excel在资产网址中缺少正斜杠

时间:2018-12-06 12:11:19

标签: laravel laravel-5.7 laravel-excel

我正在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://

这是怎么回事?

1 个答案:

答案 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中的首字母-您需要将其更改为的首字母

这感觉非常肮脏,但是有效。希望我会遇到一个更好的解决方案。