Laravel / Laravel-Excel 资产中缺少正斜杠 url

Laravel / Laravel-Excel missing forward slash in asset url

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

中缺少正斜杠

怎么回事?

好的,我解决了这个问题,并将答案保存在这里以备我自己记录,以防对其他人有用。

免责声明:我仍然不知道错误出在谁身上,因此请考虑这是一个解决方法/错误修复/糟糕的想法 - 随您喜欢。

我这样修改了两个核心文件:

vendor/league/flysystem/src/adapter/local.php中的函数readStream()中:

    // original lines, removed:
    //$location = $this->applyPathPrefix($path);
    //$stream = fopen($location, 'rb');

    // my addition (1 line):
    $stream = fopen(asset($path), 'rb');

vendor/league/flysystem/src/filesystem.php中的函数readStream()中:

    // original line, removed:       
    //$this->assertPresent($path);

    // my addition (1 line):
    $path = str_replace('http:/a','http://a', $path);

第一个函数失败了,因为它无法打开路径 - 在网址前面添加了本地前缀。

在第二个函数中,它无法断言文件存在,因为其中一个正斜杠已被删除(仍然不太确定如何...)。所以我只是做了一个字符串替换来把它放回去('a' 是我在 APP_URL 中的项目名称的第一个字母在 .ENV - 你需要把它改成你的项目的第一个字母才能工作

这感觉是一种非常肮脏的方式,但它确实有效。希望我能找到更好的解决方案。