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);
我生成了一个有效的电子表格,我可以使用记录的保存方法保存它:
$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);