【问题标题】:Laravel / Laravel-Excel missing forward slash in asset urlLaravel / Laravel-Excel 在资产网址中缺少正斜杠
【发布时间】:2018-12-06 12:11:19
【问题描述】:

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

发生了什么事?

【问题讨论】:

  • .env中检查您的APP_URL
  • 感谢您的建议。我在问问题之前检查了它,它是正确的。 (另外,我意识到如果 APP_URL 设置不正确,dd() 将返回相同的错误。

标签: laravel laravel-5.7 laravel-excel


【解决方案1】:

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

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

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

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 - 你需要将它更改为你的项目的第一个字母工作

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

【讨论】:

    猜你喜欢
    • 2014-07-12
    • 1970-01-01
    • 2014-09-07
    • 2012-08-15
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多