我正在尝试读取一个 excel 文件(xlsx(,我使用
$uri = "public/storage/resultsheet/Revival Royal Academy_Primary 5B_1572753672.xlsx";
但我不断收到错误
文件"公共/存储/结果表/复兴皇家Academy_Primary 5B_1572753672.xlsx"
不存在。我是这个框架的新手。
这是控制器代码。
public function show($id)
{
$reader = new PhpOfficePhpSpreadsheetReaderXls();
$reader->setReadDataOnly(TRUE);
$uri = "public/storage/resultsheet/Revival Royal Academy_Primary 5B_1572753672.xlsx";
$spreadsheet = $reader->load($uri);
$worksheet = $spreadsheet->getActiveSheet();
return view('student.result', compact('worksheet'));
}
您使用的路径相对于运行 PHP 的当前目录。对于 Laravel 来说,这可能意味着您将在app/Services/MyUploadService.php
或类似的东西中运行它。
鉴于您的路径是相对的,PhpOffice可能会尝试加载"应用程序/服务/公共/存储...等等",这是不正确的。
Laravel具有帮助程序方法,可以帮助您处理应用中的路径。
你可以考虑使用base_dir()
(so:base_dir('public/storage/example.xlsx').
(,因为它会给你一个绝对的路径,而类似的public_path()
用法会比这更好。
但是,所有选项中最好的是使用storage_path()
.所以你的代码会改为:
$reader->setReadDataOnly(TRUE);
$uri = storage_path("resultsheet/my.xlsx");
$spreadsheet = $reader->load($uri);
Laravel文档中有关于路径帮助程序的有用文档。
要调试它,将realpath('subdir/example.txt')
等存储在变量中并使用调试工具将帮助您找出项目和服务器中的相对/绝对路径。