我在Laravel中读取Excel文件时遇到麻烦

时间:2019-11-30 06:21:03

标签: laravel

我正在尝试读取Excel文件(xlsx),我使用

定义了路径
$uri = "public/storage/resultsheet/Revival Royal Academy_Primary 5B_1572753672.xlsx";

但我不断收到错误消息

  

文件“ public / storage / resultsheet / Revival Royal Academy_Primary 5B_1572753672.xlsx”

不存在。我是这个框架的新手。

这是控制器代码。

public function show($id)    
{
    $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();

    $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'));
}

1 个答案:

答案 0 :(得分:0)

您使用的路径是相对于PHP正在运行的当前目录的。对于Laravel,这可能意味着您将在app/Services/MyUploadService.php或类似名称中运行它。

鉴于您的路径是相对的,PhpOffice可能会尝试加载“ app / Services / public / storage ...等”。这是不正确的。

Laravel具有帮助程序方法,可以帮助您使用应用程序中的路径。

您可以考虑使用base_dir()(因此:base_dir('public/storage/example.xlsx').),因为它会为您提供一条绝对路径,而public_path()的类似用法会更好。

但是,在所有选项中最好使用storage_path()。因此,您的代码将改为:

    $reader->setReadDataOnly(TRUE);
    $uri = storage_path("resultsheet/my.xlsx");

    $spreadsheet = $reader->load($uri);

Path helpers in the Laravel docs上有有用的文档。

要对此进行调试,请将realpath('subdir/example.txt')等存储在变量中并使用调试工具将帮助您找出项目和服务器中的相对/绝对路径。