PhpSpreadsheet : 如何使用 Laravel 存储盘保存电子表格?

PhpSpreadsheet : How to save the spreadsheet with a Laravel storage disk?

我生成了一个有效的电子表格,我可以使用记录的保存方法保存它:

$writer = new Xlsx($spreadsheet);
$writer->save('file.xlsx');

但是如何使用Laravel提供的存储盘呢?我可以在将文件写入磁盘之前获取文件内容吗?

我自己想出来的。由于没有 $writer->getContent() 方法,这里是我的解决方法:

  • 保存到php://output
  • 使用ob_start/ob_get_contents捕获文件内容。
  • 最后在任何磁盘上调用常规 Storage put() 方法!

这是我的代码:

    $writer = new Xlsx($spreadsheet);

    ob_start();
    $writer->save('php://output');
    $content = ob_get_contents();
    ob_end_clean();

    Storage::disk('local')->put("myfile.xlsx", $content); 
    Storage::disk('myftp')->put("myfile.xlsx", $content); 

可以让 PHPSpreadsheet 写入资源。在本例中是一个临时文件。

$resource = tmpfile();

$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save($resource);

Storage::disk('public')->put('filename.csv', $resource);