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
- 你需要把它改成你的项目的第一个字母才能工作。
这感觉是一种非常肮脏的方式,但它确实有效。希望我能找到更好的解决方案。
我正在上传 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
- 你需要把它改成你的项目的第一个字母才能工作。
这感觉是一种非常肮脏的方式,但它确实有效。希望我能找到更好的解决方案。